Android中的DownloadManager自带下载器

//获取下载器
DownloadManager manager= (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
String url="下载地址";
Uri uri = Uri.parse(url);
//设置下载地址
DownloadManager.Request req = new DownloadManager.Request(uri);
//设置网络状态下进行更新 我这是移动网络和wifi 还有NETWORK_BLUETOOTH
req.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
//下载中和下载完后都·不显示通知栏(不显示在状态栏需要额外添加权限"android.permission.DOWNLOAD_WITHOUT_NOTIFICATION")
req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_HIDDEN);
//使用系统默认的下载路径 此处为应用内 /android/data/packages ,所以兼容7.0 8.0
req.setDestinationInExternalPublicDir(DOWNLOAD_PATH, Md5.getMD5(urlList.get(i).getUrl()) + "." + fileType);
//通知栏标题
req.setTitle(appName);
//通知栏描述信息
req.setDescription("下载中");
//设置类型为.apk
req.setMimeType("application/vnd.android.package-archive");
LogUtil.showLogE(TAG, "开始下载:" + urlList.get(i).getUrl());
manager.enqueue(req);
// 接受下载完成后的intent
public class DownloadCompleteReceiver extends BroadcastReceiver {
    @SuppressLint("NewApi")
    @Override
    public void onReceive(Context context, Intent intent) {
        //判断是否下载完成的广播
        if (intent.getAction().equals(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
            //获取下载的文件id
            long downId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
            DownloadManager.Query query = new DownloadManager.Query();
            query.setFilterById(downId);

            Cursor cursor = manager.query(query);
            if (cursor != null && cursor.moveToFirst()) {
                int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
                int status = cursor.getInt(columnIndex);
                LogUtil.showLogE(TAG, MemorySpaceCheck.getAvailableSize("/mnt/internal_sd" + DOWNLOAD_PATH) / 1024 / 1024 + "m");
                switch (status) {
                    case DownloadManager.STATUS_SUCCESSFUL:
                        Uri downloadFileUri = manager.getUriForDownloadedFile(downId);
                        EventBus.getDefault().post(new MessageEvent("下载成功", downloadFileUri.getPath()));
                        downNum++;
                        LogUtil.showLogE(TAG, "下载完成,当前下载数:" + downNum + "剩余下载数:" + (maxDown - downNum) + "下载路径:" + downloadFileUri.getPath());
                        break;
                    default:
                        EventBus.getDefault().post(new MessageEvent("下载失败"));
                        downNum++;
                        LogUtil.showLogE(TAG, "下载失败,当前下载数:" + downNum + "剩余下载数:" + (maxDown - downNum) + "失败id:" + downId);
                        break;
                }
            }
            if (downNum == maxDown) {
                LogUtil.showLogE(TAG, "下载结束,下载量:" + downNum);
                downNum = 0;
                EventBus.getDefault().post(new MessageEvent("下载完成"));
                if (receiver != null) {
                    unregisterReceiver(receiver);
                    receiver = null;
                }
                //停止服务并关闭广播
                DownloadService.this.stopSelf();
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/tomb363897221/article/details/88368577
今日推荐