android DownloadManager的自定義工具類DownloadManagerUtil

1.定義DownloadManagerUtil 類

package core.common;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;


/**
 * use: DownloadManagerUtil.download(context, url, savePath, saveName, completeListener);
 * or use: DownloadManagerUtil.download(context, url, completeListener)
 */
public class DownloadManagerUtil {
    public static long download(Context context, String url, String savePath, String saveName, DownloadCompleteListener completeListener){
        DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
        saveName = saveName != null ? saveName : url.substring(url.lastIndexOf('/') + 1);
        if(savePath == null){
            request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, saveName);
        }else {
            if(savePath.indexOf("/mnt/sdcard/") > -1){
                savePath = savePath.replace("/mnt/sdcard/", "");
                Log.e("savePath", savePath);
            }
            request.setDestinationInExternalPublicDir(savePath, saveName);
        }
        long downloadId = downloadManager.enqueue(request);
        Log.d("download", "downloadId: " + downloadId);
        registerCompleteReceiver(context, downloadId, completeListener);
        return downloadId;
    }


    public static long download(Context context, String url, DownloadCompleteListener completeListener){
        return download(context, url, null, null, completeListener);
    }


    public interface DownloadCompleteListener{
        public void onComplete(DownloadManager downloadManager, long completeDownloadId);
    }


    private static void registerCompleteReceiver(Context context, long downloadId, DownloadCompleteListener completeListener){
        context.registerReceiver(new DownloadManagerUtil().new DownloadManagerReceiver(downloadId, completeListener), new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
    }


    private class DownloadManagerReceiver extends BroadcastReceiver {
        private long downloadId;
        private DownloadCompleteListener completeListener;
        public DownloadManagerReceiver(long downloadId, DownloadCompleteListener completeListener){
            this.downloadId = downloadId;
            this.completeListener = completeListener;
        }
        @Override
        public void onReceive(Context context, Intent intent) {
            DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
            long completeDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
            Log.d("CompleteReceiver", "completeDownloadId: " + completeDownloadId + ", currentDownloadId: " + downloadId);
            if(downloadId == completeDownloadId){
                completeListener.onComplete(downloadManager, downloadId);
            }
            context.unregisterReceiver(this);
        }
    }
}



2.DownloadManagerUtil的使用: 下載、監聽下載完成

//long downloadId = DownloadManagerUtil.download(context, url, savePath, saveFileName, completeListener);

long downloadId = DownloadManagerUtil.download(context, url,  completeListener);

舉例:

long downloadId = DownloadManagerUtil.download(context,
                apkUrl,
                upgradeBean.getDownloadSavePath(),
                upgradeBean.getDownloadSaveFileName(),
                new DownloadManagerUtil.DownloadCompleteListener() {
                    @Override
                    public void onComplete(DownloadManager downloadManager, long completeDownloadId) {
                        DownloadManager.Query myDownloadQuery = new DownloadManager.Query();
                        myDownloadQuery.setFilterById(completeDownloadId);


                        Cursor myDownload = downloadManager.query(myDownloadQuery);
                        if (myDownload.moveToFirst()) {
                            int fileNameIdx = myDownload.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME);
                            int fileUriIdx =myDownload.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);


                            String fileName = myDownload.getString(fileNameIdx);
                            String fileUri = myDownload.getString(fileUriIdx);
                            Log.d("CompleteReceiver", fileName + " : " + fileUri);
                            //
                           //
                        }
                        myDownload.close();
                    }
                });


自己封裝的,水平有限,如有不足的地方歡迎指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章