在Android应用程序中,我想使用DownloadManager从使用P2P(Wi-Fi Direct)连接的对等端下载文件。 但是,我发现除非平板电脑/手机连接到WiFi网络,否则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”,因为它从mSystemFacade获取空的NetworkInfo。参见:
/packages/providers/DownloadProvider/src/com/android/providers/downloads/DownloadInfo.java
进一步调查提示ConnectivityService中的“问题”。虽然它在连接Wi-Fi网络时将其mActiveDefaultNetwork设置为正确的类型,但在连接P2P时它将不会执行任何操作。
/frameworks/base/services/core/java/com/android/server/ConnectivityService.java
我正在使用Nexus 4和Android 5.0.1,但我在KitKat 4.4上看到了同样的问题。
答案 0 :(得分:0)
如果您删除以下代码行,它将起作用。
“request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);”