0

從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。

回答

0

如果你刪除下面的代碼行,它將工作。

「request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE);」