這篇文章主要介紹了DownloadManager如何實現(xiàn)文件下載功能,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)建站專注于岫巖企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,商城系統(tǒng)網(wǎng)站開發(fā)。岫巖網(wǎng)站建設(shè)公司,為岫巖等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
前言
關(guān)于文件下載,或許不是一個多么陌生的內(nèi)容,在網(wǎng)絡(luò)操作中下載只是其中一個方面,但是關(guān)于文件下載還是有不少東西要說,今天我就拿下載的方式來說吧。
文件下載有許多方式,比如什么多線程下載,單線程下載等等,我剛開始接觸文件下載的時候是看了一個《關(guān)于文件多線程下載原理》的一個視頻,里面講了什么是多線程下載,然后就是自己寫一個下載類,實現(xiàn)文件下載,雖然最后也是能夠?qū)崿F(xiàn)下載,但是效果并不是多么的好,有時候文件無法下載成功,那時候我就想應(yīng)該有封裝好的工具來幫助實現(xiàn)下載。確實,后來百度了一下,我找到許多的第三方j(luò)ar包來實現(xiàn)下載,其中Afinal框架是我一直在用的,還不錯。不想每一次都是用第三方的東西,android系統(tǒng)應(yīng)該自己擁有下載的工具類,然后就是我們今天要講的 DownloadManager了。
接觸DownloadManager是因為我前一段時間在寫自己的一個音樂播放器,需要從網(wǎng)絡(luò)獲取歌曲并下載,這個時候我就想找一個簡單是用的下載方式然后就認(rèn)識了它,關(guān)于它的使用我還沒做具體的深究,只是把它用在了自己的應(yīng)用里面,現(xiàn)在寫出來分享一下當(dāng)時是怎么做的。
實現(xiàn)
下載我主要關(guān)心三個方面的內(nèi)容:
從哪來
到哪去
完成之后的操作
這三方面的內(nèi)容就是最重要的,下面我就下載一首歌來進(jìn)行說明:
我們首先需要得到DownloadManager的一個實例,它既然是系統(tǒng)提供的服務(wù),自然需要用getSystemService來得到了。
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
得到manager對象之后我們就需要一個下載請求,把下載的信息(也即“從哪來”,“到哪去”)設(shè)置進(jìn)去。下載請求是DownloadManager的一個內(nèi)部類Request,我們先生成Request的對象:DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));可以看到Request的一個構(gòu)造函數(shù)傳入的是一個Uri對象,我們調(diào)用Uri的靜態(tài)方法來根據(jù)下載的Url得到一個Uri對象,這也就是我們說的”從哪來“。
下面還有三個Request的三個方法需要我們調(diào)用:
setTitle(String title)
setDescription(String desc)
setNotificationVisibility(int flag)
其中setTitle是設(shè)置下載的標(biāo)題,setDescription設(shè)置下載描述,示例圖如下:

其中”Nobody“是標(biāo)題,“WonderGirls”是描述。
setNotificationVisibility方法就需要好好說說了,它的參數(shù)有四種情況:
Request.VISIBILITY_VISIBLE:在下載進(jìn)行的過程中,通知欄中會一直顯示該下載的Notification,當(dāng)下載完成時,該Notification會被移除,這是默認(rèn)的參數(shù)值。
Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED:在下載過程中通知欄會一直顯示該下載的Notification,在下載完成后該Notification會繼續(xù)顯示,直到用戶點擊該Notification或者消除該Notification。
Request.VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION:只有在下載完成后該Notification才會被顯示。
Request.VISIBILITY_HIDDEN:不顯示該下載請求的Notification。如果要使用這個參數(shù),需要在應(yīng)用的清單文件中加上DOWNLOAD_WITHOUT_NOTIFICATION權(quán)限。
我們根據(jù)需要選擇合適的參數(shù),如果我們不希望下載的時候顯示進(jìn)度,那么我們就可以設(shè)置Request.VISIBILITY_HIDDEN,這樣在下載的時候我們就看不到通知了,不過這樣的壞處是我們就無法知道下載是否成功了。
“從哪來”的問題解決了,現(xiàn)在我們來看“到哪去”的問題:setDestinationUri這個函數(shù)用來設(shè)置下載路徑,參數(shù)是一個Uri對象,使用如下:
String path = "/storage/sdcard1/music/許嵩 - 幻聽.mp3"; File file = new File(path); Uri uri = Uri.fromFile(file); request.setDestinationUri(uri);
這樣我們就設(shè)置好了下載的路徑。
Request設(shè)置好了之后我們就可以調(diào)用manager的方法開始下載了:
manager.enqueue(request);這個方法就是把下載請求放到一個隊列里面然后就開始下載,它有一個返回值,這個返回值是一個下載id,用來唯一標(biāo)示這一次的下載,在下面我們會用到這個id,我們把它記為mDownloadID;
最后就剩下載完成之后的情況了,下載完成之后我們可能還會有操作,比如下載完成之后打開文件等等,就像我們看到了一些軟件進(jìn)行升級,下載完成apk文件之后就直接打開安裝,這都是下載完成之后的操作,那么該如何實現(xiàn)呢?
原來DownloadManager在下載完成之后會發(fā)送一個廣播,我們只需要注冊一個廣播接收器得到廣播就可以進(jìn)行我們自己的操作了。
IntentFilter filter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
long reference = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (mDownloadID == reference){
Intent i = new Intent();
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setAction(Intent.ACTION_VIEW);
String type = "application/vnd.android.package-archive";
i.setDataAndType(Uri.fromFile(file),type);
mContext.startActivity(i);
}
}
};
mContext.registerReceiver(receiver, filter);這樣我們就自己注冊了一個廣播接收器,用來接收下載完成之后發(fā)送的廣播,接收到之后我們就直接打開文件,在代碼中,我設(shè)置的是打開apk文件,即設(shè)置文件類型為”application/vnd.android.package-archive“,其中mDownloadID就是我們得到的那個下載ID,這樣我們實現(xiàn)了文件的下載和打開。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“DownloadManager如何實現(xiàn)文件下載功能”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
網(wǎng)站名稱:DownloadManager如何實現(xiàn)文件下載功能
本文網(wǎng)址:http://chinadenli.net/article16/pgjidg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、電子商務(wù)、云服務(wù)器、品牌網(wǎng)站設(shè)計、建站公司、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)