Android DownloadManager 的使用

Android自家使用了Volley來處理輕量級的網(wǎng)絡(luò)請求啊掏,但是不建議用來處理下載大文件熬芜,在尋求如何下載大數(shù)據(jù)的時(shí)候缕贡,Android官方給出了一個(gè)建議参淫,使用DownloadManager來處理蹋艺。

Volley is not suitable for large download or streaming operations, since Volley holds all responses in memory during parsing. For large download operations, consider using an alternative like DownloadManager.

使用DownloadManager來下載

我不想詳細(xì)列出它有哪些方法,哪些參數(shù)可供開發(fā)人員使用黄刚,因?yàn)槲蚁M惆炎⒁饬Ψ旁贒ownloadManager是如何開始下載的。首先假設(shè)我們需要下載一個(gè)apk來更新應(yīng)用的版本民效,那么來看一下如何使用DownloadManager來處理的:

// uri 是你的下載地址憔维,可以使用Uri.parse("http://")包裝成Uri對象
DownloadManager.Request req = new DownloadManager.Request(uri);

// 通過setAllowedNetworkTypes方法可以設(shè)置允許在何種網(wǎng)絡(luò)下下載,
// 也可以使用setAllowedOverRoaming方法畏邢,它更加靈活
req.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);

// 此方法表示在下載過程中通知欄會(huì)一直顯示該下載业扒,在下載完成后仍然會(huì)顯示,
// 直到用戶點(diǎn)擊該通知或者消除該通知舒萎。還有其他參數(shù)可供選擇
req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

// 設(shè)置下載文件存放的路徑程储,同樣你可以選擇以下方法存放在你想要的位置。
// setDestinationUri
// setDestinationInExternalPublicDir
req.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS, title);

// 設(shè)置一些基本顯示信息
req.setTitle("Android.apk");
req.setDescription("下載完后請點(diǎn)擊打開");
req.setMimeType("application/vnd.android.package-archive");

// Ok go!
DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
long downloadId = dm.enqueue(req);

這樣我們就開始下載了臂寝。至于斷點(diǎn)續(xù)傳章鲤、在什么網(wǎng)絡(luò)環(huán)境下下載,系統(tǒng)已經(jīng)按我們想要的方式來運(yùn)行咆贬,我們并不需要擔(dān)心這些败徊。

獲取下載文件

看到上面代碼的最后一行返回的參數(shù)downloadId了嗎?對掏缎,我們需要利用它來找出我們剛剛下載的文件:

DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId);
Cursor c = dm.query(query);
if (c != null) {
    if (c.moveToFirst()) {
        String fileUri = c.getString(c.getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_URI));
        // TODO 你可以在這里處理你的文件
    }
    c.close();
}

獲取下載的狀態(tài)

有時(shí)候我們不想重復(fù)下載同一個(gè)文件皱蹦,或者出于某種原因,我們需要查詢下載的狀態(tài)眷蜈,以便于更新界面等操作沪哺,那么我們來看看如何獲取下載的狀態(tài)的:

DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId);
Cursor c = dm.query(query);
if (c != null && c.moveToFirst()) {
    int status = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS));
    switch (status) {
        case DownloadManager.STATUS_PENDING:
            break;
        case DownloadManager.STATUS_PAUSED:
            break;
        case DownloadManager.STATUS_RUNNING:
            break;
        case DownloadManager.STATUS_SUCCESSFUL:
            break;
        case DownloadManager.STATUS_FAILED:
            break;
}
if (c != null) {
    c.close();
}

每個(gè)方法都如其名,不在贅述酌儒。

最后

斷點(diǎn)續(xù)傳辜妓?交給系統(tǒng)處理吧。

轉(zhuǎn)載請附上本文地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嫌拣,隨后出現(xiàn)的幾起案子柔袁,更是在濱河造成了極大的恐慌,老刑警劉巖异逐,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捶索,死亡現(xiàn)場離奇詭異,居然都是意外死亡灰瞻,警方通過查閱死者的電腦和手機(jī)腥例,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酝润,“玉大人燎竖,你說我怎么就攤上這事∫” “怎么了构回?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疏咐。 經(jīng)常有香客問我纤掸,道長,這世上最難降的妖魔是什么浑塞? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任借跪,我火速辦了婚禮,結(jié)果婚禮上酌壕,老公的妹妹穿的比我還像新娘掏愁。我一直安慰自己,他們只是感情好卵牍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布果港。 她就那樣靜靜地躺著,像睡著了一般辽慕。 火紅的嫁衣襯著肌膚如雪京腥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天溅蛉,我揣著相機(jī)與錄音公浪,去河邊找鬼。 笑死船侧,一個(gè)胖子當(dāng)著我的面吹牛欠气,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播镜撩,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼预柒,長吁一口氣:“原來是場噩夢啊……” “哼队塘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宜鸯,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤憔古,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后淋袖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸿市,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年即碗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了焰情。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剥懒,死狀恐怖内舟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情初橘,我是刑警寧澤验游,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站保檐,受9級特大地震影響批狱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜展东,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炒俱。 院中可真熱鬧盐肃,春花似錦、人聲如沸权悟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峦阁。三九已至谦铃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間榔昔,已是汗流浹背驹闰。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撒会,地道東北人嘹朗。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像诵肛,于是被迫代替她去往敵國和親屹培。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,749評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件褪秀、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,059評論 4 62
  • 從Android 2.3(API level 9)開始Android用系統(tǒng)服務(wù)(Service)的方式提供了Dow...
    柨柨閱讀 2,702評論 1 4
  • 最近在開發(fā)相機(jī)相關(guān)功能蓄诽,順便把學(xué)習(xí)到的知識總結(jié)一下,主要包括: 1媒吗、利用intent方式調(diào)用系統(tǒng)相機(jī)拍照仑氛; 2、利...
    可笑的人人閱讀 1,805評論 0 0
  • 仙劍一直是國產(chǎn)游戲的一個(gè)大IP蝴猪,不僅游戲還有電視劇都是非常的深入人心调衰。玩過仙劍的人對于仙劍的愛恨情仇都有一種偏執(zhí)的...
    哎呦喂張璐啊閱讀 399評論 0 2