【发布时间】:2015-09-02 16:33:09
【问题描述】:
从一个 Android 应用程序,我想使用 DownloadManager 从使用 P2P(Wi-Fi Direct)连接的对等点下载文件。 但是,我发现除非平板电脑/手机连接到 WiFi 网络,否则 DownloadManager 将拒绝通过 P2P 连接下载。它将输出一个声称“NO CONNECTION”的错误。如果 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
我在 Android 5.0.1 上使用 Nexus 4,但我在 KitKat 4.4 上看到了同样的问题。
【问题讨论】:
标签: android android-wifi p2p wifi-direct android-download-manager