從Android應用程序中,我想使用DownloadManager從使用P2P(Wi-Fi Direct)連接的對等端下載文件。 但是,我發現除非平板電腦/手機連接到WiFi網絡,否則DownloadManager將拒絕通過P2P連接進行下載。它會輸出一個錯誤,聲稱「無連接」。如果Wi-Fi和P2P都連接,我可以通過P2P連接成功下載。如何通過P2P連接使用Android的DownloadManager
下面是一個示例代碼:
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,但我已經看到了奇巧同樣的問題4.4。