DownloadManager的使用和介绍

首先该管理者适用于处理长时间的下载操作,支持断点续传下载。主要应用于版本更新,音频文件下载。

通过上下文获取对象。

<span style="font-family:SimSun;font-size:12px;background-color: rgb(255, 255, 204);">DownloadManager downloadManager; 
downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE); </span>

要下载文件先获取DownloadManager .Rquest对象,把要下载的uri在创建rquest时传递过去:
<span style="font-family:SimSun;font-size:12px;background-color: rgb(255, 255, 204);">Uri uri = Uri.parse(apkUrl); //apkUrl为更新apk的下载地址</span>
<span style="font-family:SimSun;font-size:12px;background-color: rgb(255, 255, 204);">DownloadManager.Request request = new Request(uri); 
long downloadId= downloadManager.enqueue(request); </span>
返回的long值为downloadManager下载管理的唯一Id,可以通过该id获取下载路径,和删除下载任务。

<span style="font-family:SimSun;font-size:12px;background-color: rgb(255, 255, 204);"> downloadManager.remove(downloadId);
 Uri uri= downloadManager.getUriForDownloadedFile(downloadId);</span>

DownloadManager .Rques还可以对下载进行一些设置
<span style="font-family:SimSun;font-size:12px;background-color: rgb(255, 255, 204);">request.allowScanningByMediaScanner();//表示允许MediaScanner扫描到这个文件,默认不允许。
request.setTitle(“下载标题”);//设置下载中通知栏提示的标题
request.setDescription(“下载详情”);//设置下载中通知栏提示的介绍
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
//表示下载进行中和下载完成的通知栏是否显示。默认只显示下载中通知。</span>

<span style="color: rgb(68, 68, 68); line-height: 24px; background-color: rgb(255, 255, 204);"><span style="font-family:SimSun;font-size:12px;">VISIBILITY_HIDDEN表示不显示任何通知栏提示,这个需要在AndroidMainfest中添加权限android.permission.DOWNLOAD_WITHOUT_NOTIFICATION.</span></span>

进行这些设置以后再通知栏就可以看到下载的详细信息,和进度条的显示。

request.setAllowedNetworkTypes(Request.NETWORK_WIFI); //仅在wifi环境下可以下载

下面是监听下载变化,可以建立个子线程每3秒调用监听一次,更新自定义精度条

 public int[] getBytesAndStatus(long downloadId) {//这时监听下载变化
        int[] bytesAndStatus = new int[] { -1, -1 };
        DownloadManager.Query query = new DownloadManager.Query().setFilterById(downloadId);
        Cursor c = null;
        try {
            c = downloadManager.query(query);
            if (c != null && c.moveToFirst()) {
                //当前下载长度
                bytesAndStatus[0] = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR));
                //总字节长度
                bytesAndStatus[1] = c.getInt(c.getColumnIndexOrThrow(DownloadManager.COLUMN_TOTAL_SIZE_BYTES));
            }
        } finally {
            if (c != null) {
                c.close();

            }
        }

下面是下载成功后广播接收,在添加下载任务的时候就要注册该广播,界面销毁时记得取消注册广播。

public class DownloadReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // 获取下载完成的loadId
        long completeDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
        // 判断
        long downloadId=Long.parseLong(SharedUtil.getString(context, Constant.NEW_VERSION_DOWNLOADID));
        if(downloadId==completeDownloadId){
            DownloadUtil.isdown=false;
           DownloadManager downloadManager = (DownloadManager)context.getSystemService(context.DOWNLOAD_SERVICE);
            Uri uri= downloadManager.getUriForDownloadedFile(downloadId);
            LogUtil.e(uri.toString());
            //创建Intent意图
            Intent inten=new Intent(Intent.ACTION_VIEW);
            intent.setFlags(inten.FLAG_ACTIVITY_NEW_TASK);//启动新的activity
            //设置Uri和类型
            inten.setDataAndType( uri, "application/vnd.android.package-archive");
            //执行安装
            context.startActivity(intent);
    }}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值