如何在P2P连接上使用Android的DownloadManager

时间:2015-09-02 16:33:09

标签: android android-wifi p2p wifi-direct android-download-manager

在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上看到了同样的问题。

1 个答案:

答案 0 :(得分:0)

如果您删除以下代码行,它将起作用。

“request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);”