Android中DownLoadManager的使用
DownloadManager主要用來(lái)進(jìn)行長(zhǎng)時(shí)間http下載,是個(gè)系統(tǒng)后臺(tái)服務(wù)。連接出錯(cuò)了能自己重連,重啟了也能繼續(xù)連。
1.得到DownloadManager
DownloadManager dm = (DownloadManager)getSystemService( DOWNLOAD_SERVICE).
2.得到連接請(qǐng)求對(duì)象
DownloadManager.Request down=new DownloadManager.Request (Uri.parse("http://10.0.11.210:8080/test/我的歌聲里.mp3"));
3.對(duì)請(qǐng)求設(shè)置參數(shù)(常用的)與開始下載
//設(shè)置允許使用的網(wǎng)絡(luò)類型,移動(dòng)網(wǎng)絡(luò)與wifi都可以
down.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
//顯示在下載界面,即下載后的文件在下載管理里顯示
down.setVisibleInDownloadsUi(true);
//設(shè)置下載后文件存放的位置,不設(shè)置會(huì)存在data/data/com.android.provider.downloads/cache/下 面,設(shè)置后存在sd上的Android/data/<包名>/files/下面。第2個(gè)參數(shù)是files下再建目錄的目錄名,第3個(gè)參數(shù)是文 件名,如果第3個(gè)參數(shù)帶路徑,要確保路徑存在,第2個(gè)參數(shù)路徑隨便寫,會(huì)自己創(chuàng)建 down.setDestinationInExternalFilesDir(mContext, Environment.DIRECTORY_MUSIC, "我的歌聲里.mp3");
//在通知欄顯示下載詳情,比如百分比。
down.setShowRunningNotification(true)(API 9); //默認(rèn)是true,改為false需要權(quán)限android.permission.DOWNLOAD_WITHOUT_NOTIFICATION。
此方法被setNotificationVisibility(int visibility)(API 11)取代。
//以sd卡路徑為根路徑,與上方法只有一個(gè)有效。第一個(gè)參數(shù)創(chuàng)建文件夾用的是mkdir
down.setDestinationInExternalPublicDir(Environment.DIRECTORY_MUSIC, "我的歌聲里.mp3");
//將下載請(qǐng)求放入隊(duì)列
manager.enqueue(down);
// 下載完成后保留 下載的notification。文檔上寫明參數(shù)需要API 12以上。4.0的手機(jī)開始。
[java] view plaincopy
down.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
4.接收下載完成信息
廣播接收下載完成信息,Action為DownloadManager.ACTION_DOWNLOAD_COMPLETE。
能得到下載完成的文件存在數(shù)據(jù)庫(kù)中的ID:long downId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
getUriForDownloadedFile(long id)能得到文件存儲(chǔ)的URI。
也可以通過(guò)new一個(gè)DownloadManager.Query再setFilterById(long... ids),接著用DownloadManager的query(DownloadManager.Query query)來(lái)得到Cursor對(duì)象
5.remove(long... ids)
取消正在下載的任務(wù)或者刪除下載了一部分或者全部的文件,刪除對(duì)應(yīng)的數(shù)據(jù)記錄。
6.id怎么獲取
可以監(jiān)聽數(shù)據(jù)庫(kù)文件/data/data/com.android.provider.downloads/database/downloads.db。數(shù)據(jù)庫(kù)有專門的監(jiān)聽類。也可以用文件監(jiān)聽類FileObsever監(jiān)測(cè)文件變化。
得到變化的數(shù)據(jù)行。數(shù)據(jù)庫(kù)里的數(shù)據(jù)并不是在下載完后才插入的,而是下載時(shí)通知欄上百分比每變化一次就更新一次。
下載百分比也是這么獲取,數(shù)據(jù)庫(kù)里有兩個(gè)字段其中current_bytes是當(dāng)前下載bit數(shù),在等于total_bytes之前是更新的。
7.點(diǎn)擊正在下載的notification將會(huì)受到Action為DownloadManager.ACTION_NOTIFICATION_CLICKED的廣播。
下載示例代碼:
[java] view plaincopy
private void begainDownload() {
DownloadManager dm = (DownloadManager)getSystemService( DOWNLOAD_SERVICE);
DownloadManager.Request down=new DownloadManager.Request (Uri.parse("http://10.0.11.210:8080/test/我的歌聲里.mp3"));
down.setVisibleInDownloadsUi(true);
down.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_MUSIC, "我的歌聲里.mp3");
down.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
dm.enqueue(down);
}
tomcat服務(wù)器提供資源。文件存在了/sdcard/Android/data/<包名>/files/Music/我的歌聲里.mp3
權(quán)限:
[html] view plaincopy
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
推薦文章
2025-01-18
2024-11-28
2024-11-09
2024-10-25
2024-06-25
2024-01-04
2023-11-06
2023-10-30
2023-10-13
2023-10-10
穩(wěn)定
產(chǎn)品高可用性高并發(fā)貼心
項(xiàng)目群及時(shí)溝通專業(yè)
產(chǎn)品經(jīng)理1v1支持快速
MVP模式小步快跑承諾
我們選擇聲譽(yù)堅(jiān)持
10年專注高端品質(zhì)開發(fā)聯(lián)系我們
友情鏈接: