Как использовать DownloadManager Android через P2P-соединение

Из приложения для 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.


person Sambusak    schedule 02.09.2015    source источник


Ответы (1)


Если вы удалите следующую строку кода, она будет работать.

"request.setAllowedNetworkTypes (DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);"

person Community    schedule 24.08.2016