Из приложения для Android я хотел бы использовать DownloadManager для загрузки файлов с однорангового узла, подключенного с помощью P2P (Wi-Fi Direct). Однако я обнаружил, что, если планшет / телефон не подключен к сети Wi-Fi, DownloadManager откажется загружать через P2P-соединение. Будет выведена ошибка «НЕТ СОЕДИНЕНИЯ». Если подключены и Wi-Fi, и P2P, я могу успешно загрузить через соединение P2P.
Вот пример кода:
String url = "http://ipv4.download.thinkbroadband.com/5MB.zip";
String localFile = "5MB.zip";
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);
request.setTitle("test.txt");
request.setDescription("Testing DownloadManager -- 5MB.zip");
request.setVisibleInDownloadsUi(true);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
request.setDestinationInExternalFilesDir(context, null, localFile);
DownloadManager downloadManager = (DownloadManager)context.getSystemService(context.DOWNLOAD_SERVICE);
long downloadId = downloadManager.enqueue(request);
Я не уверен, что я просто использую его неправильно или это неподдерживаемая функция. Я готов изменить кодовую базу Android, если это необходимо, чтобы заставить ее работать (но я не могу выбрать альтернативу DownloadManager).
При проверке кода Android кажется, что метод checkCanUseNetwork () вернет «NO_CONNECTION», потому что он получает нулевое значение NetworkInfo от mSystemFacade. Видеть:
/packages/providers/DownloadProvider/src/com/android/providers/downloads/DownloadInfo.java
Дальнейшее расследование указывает на "проблему" в ConnectivityService. Хотя он устанавливает свой mActiveDefaultNetwork в правильный тип при подключении к сети Wi-Fi, он ничего не будет делать, когда подключен P2P.
/frameworks/base/services/core/java/com/android/server/ConnectivityService.java
Я использую Nexus 4 с Android 5.0.1, но я видел ту же проблему с KitKat 4.4.