我是靠谱客的博主 丰富啤酒,最近开发中收集的这篇文章主要介绍Android——实现网络下载资源,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

网络权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

MainActivity

downloadAPK(bean.getData().getApkUrl(),"APK");

private void downloadAPK(String versionUrl, String versionName) {
    //创建下载任务
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(versionUrl));
    request.setAllowedOverRoaming(false);//漫游网络是否可以下载

    //设置文件类型,可以在下载结束后自动打开该文件
    MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
    String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(versionUrl));
    request.setMimeType(mimeString);

    //在通知栏中显示,默认就是显示的
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
    request.setVisibleInDownloadsUi(true);

    //sdcard的目录下的download文件夹,必须设置
    request.setDestinationInExternalPublicDir("/download/", versionName);
    //request.setDestinationInExternalFilesDir(),也可以自己制定下载路径

    //将下载请求加入下载队列
    downloadManager = (DownloadManager) MainActivity.this.getSystemService(MainActivity.this.DOWNLOAD_SERVICE);
    //加入下载队列后会给该任务返回一个long型的id    //通过该id可以取消任务,重启任务等等,看上面源码中框起来的方法
    mTaskId = downloadManager.enqueue(request);

    //注册广播接收者,监听下载状态
    MainActivity.this.registerReceiver(receiver,new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}

private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        checkDownloadStatus();//检查下载状态
    }
};

private void checkDownloadStatus() {
    DownloadManager.Query query = new DownloadManager.Query();
    query.setFilterById(mTaskId);//筛选下载任务,传入任务ID,可变参数
    Cursor c = downloadManager.query(query);
    if (c.moveToFirst()) {
        int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
        switch (status) {
            case DownloadManager.STATUS_PAUSED:
                Log.i("zzz",">>>下载暂停");
            case DownloadManager.STATUS_PENDING:
                Log.i("zzz",">>>下载延迟");
            case DownloadManager.STATUS_RUNNING:
                Log.i("zzz",">>>正在下载");
                break;
            case DownloadManager.STATUS_SUCCESSFUL:
                Log.i("zzz",">>>下载完成");
                File file = Environment.getExternalStorageDirectory();
                installAPK(new File(file+"/Download"));
                break;
            case DownloadManager.STATUS_FAILED:
                Log.i("zzz",">>>下载失败");
                break;
        }
    }
}

protected void installAPK(File file) {
    if (!file.exists()) return;
    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = Uri.parse("file://" + file.toString());
    intent.setDataAndType(uri, "application/vnd.android.package-archive");
    //在服务中开启activity必须设置flag,后面解释
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    MainActivity.this.startActivity(intent);
}

最后

以上就是丰富啤酒为你收集整理的Android——实现网络下载资源的全部内容,希望文章能够帮你解决Android——实现网络下载资源所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部