`

android DownloadManager

 
阅读更多
From: https://www.jianshu.com/p/46fd1c253701


    private static long mTaskId = -1;

    /*
     * android system api to download
     */
    public static void download(Context context, String urlStr, String filename) {
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(urlStr));
        request.setAllowedOverRoaming(false);//漫游网络是否可以下载

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

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

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

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

//        downloadManager.remove(taskId) //

        context.registerReceiver(mReceiverDownload, new IntentFilter());
    }

    private static BroadcastReceiver mReceiverDownload = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            checkDownloadStatus();
        }
    };

    private static void checkDownloadStatus() {
        DownloadManager.Query query = new DownloadManager.Query();
        query.setFilterById(mTaskId);
        DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
        Cursor c = downloadManager.query(query);
        if (c.moveToFirst()){
            int status = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
            switch (status){
                case DownloadManager.STATUS_PAUSED:
                    Log.v(TAG, "下载暂停");
                    break;
                case DownloadManager.STATUS_PENDING:
                    Log.v(TAG, "下载延迟");
                    break;
                case DownloadManager.STATUS_RUNNING:
                    Log.v(TAG, "正在下载...");
                    break;
                case DownloadManager.STATUS_SUCCESSFUL:
                    Log.v(TAG,"下载完成");
                    // Play Act
                    break;
                case DownloadManager.STATUS_FAILED:
                    Log.v(TAG, "下载失败");
                    break;
            }
        }
    }

希望你可以看到最后这几句,不然你也会被坑的!
1.虽然下载什么的不需要自己操心了,但是建议还是将整个上面四段代码放在Service中执行,因为放在Activity中时,当用户按home键后,即使下载完了,也不会弹出安装界面
2.建议使用startService的方式启动Service,这样不会与Activity生命周期绑定,保证下载完后能顺利安装。
3.Service使用完后要及时地停掉!


作者:Marno
链接:https://www.jianshu.com/p/46fd1c253701
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
分享到:
评论

相关推荐

    Android DownloadManager和自定义下载功能

    Android系统自带了一个名为DownloadManager的服务,它为开发者提供了便捷的方式来管理和执行文件下载。本文将深入探讨Android DownloadManager以及如何自定义下载功能。 **Android DownloadManager** 1. **...

    android DownloadManager示例

    DownloadManager是系统开放给第三方应用使用的类,包含两个静态内部类DownloadManager.Query和DownloadManager.Request。DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息,这两个...

    android DownloadManager.rar

    在Android系统中,DownloadManager是一个系统服务,用于在后台下载大文件,比如应用程序、更新或者媒体文件。这个服务是异步的,允许用户在不占用应用界面的情况下进行下载操作,并且支持断点续传和网络恢复功能。接...

    android中DownloadManager实现版本更新,监听下载进度实例

    在Android开发中,DownloadManager是处理长时间下载操作的一个系统服务。通过使用DownloadManager,开发者可以实现应用的自动更新功能,并通过监听下载进度,向用户展示当前下载状态。下面详细介绍一下Download...

    Android-使用DownloadManager下载完apk自动提示安装的功能

    在Android应用开发中,有时我们需要实现一个功能,即使用系统内置的`DownloadManager`服务来下载APK文件,并在下载完成后自动提示用户进行安装。这个功能对于应用的更新或者安装外部资源非常实用。本文将详细讲解...

    Android DownLoadManager小例子

    在Android平台上,`DownloadManager`是一个系统服务,用于在后台管理大文件的下载任务,尤其适合在用户不直接交互的情况下进行。本示例将重点介绍如何利用`DownloadManager.Request`方法来实现文件下载,并在通知栏...

    Android studio 使用自带DownloadManager实现更新app

    本篇将详细讲解如何使用Android自带的`DownloadManager`来实现这个功能。 `DownloadManager`是Android系统提供的一个服务,用于在后台下载大文件,特别适合用来下载应用更新。它具有良好的兼容性,从Android 2.3...

    Android的DownloadManager下载完成广播接收者

    这个广播接收者主要工作是把DownloadManager下载的文件拷贝到U盘中以解决在TVBox开发过程中想要直接把文件下载到U盘时产生的java.lang.SecurityException异常。没分的朋友可以直接前往:...

    android自带下载工具DownloadManager示例demo

    在Android系统中,内置了一个强大的下载管理器——DownloadManager,它是Android SDK的一部分,允许开发者方便地实现后台下载任务,无需用户手动操作。本示例将详细介绍如何使用DownloadManager进行文件下载,并提供...

    android使用DownloadManager自动更新,安装apk

    `DownloadManager`是Android系统服务之一,它负责在后台下载文件,特别适合处理大文件,如APK更新包。这个服务具有以下优点: 1. **后台下载**:即使用户关闭了应用,下载任务也会继续。 2. **断点续传**:如果下载...

    Android使用DownloadManager实现版本更新

    Android系统提供了一个内置的`DownloadManager`类,它允许开发者在后台下载大文件,如应用的新版本APK,而无需用户手动干预。本篇文章将深入探讨如何利用`DownloadManager`来实现自动版本更新。 首先,我们需要了解...

    安卓SD卡文件管理更新信息相关-DownloadManager(强制升级与自选升级.rar

    首先,DownloadManager是Android提供的一个系统服务,它允许应用程序在后台下载文件,并且提供了对下载任务的管理、监控和恢复功能。开发者可以通过BroadcastReceiver监听下载状态的变化,从而实现对升级文件的处理...

    DownloadManager框架实战源码

    DownloadManager是Android系统中用于管理下载任务的框架,它为应用程序提供了一种异步、后台处理的方式,方便用户在后台下载文件,并且支持断点续传和网络恢复功能。这个框架使得开发者可以轻松地在Android应用中...

    Android-Updater基于DownloadManager封装的更新器

    `Android-Updater`是一个基于`DownloadManager`服务的封装库,旨在简化应用程序的更新流程,为开发者提供一个高效且用户友好的解决方案。本篇文章将深入探讨`Android-Updater`的工作原理、主要功能及其在实际开发中...

    Android代码-Android-Download-Manager-Pro

    Android-Download-Manager Android/Java download manager library help you to download files in parallel mechanism in some chunks. Overview This library is a download manager android/java library which ...

    Android DownloadManager(基于OkHttp).zip

    Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件...

    android downlaod manager下载管理器

    《Android Download Manager详解》 Android Download Manager是一款专为Android系统设计的高级下载管理工具,它提供了全面且强大的功能,能够满足用户对下载任务的各种需求。本文将深入探讨其主要特性,包括多任务...

    Android版本更新使用DownloadManager.

    在Android系统中,DownloadManager是系统提供的一个服务,用于在后台下载大文件,如应用程序的更新包。这个服务是异步的,可以在用户离开应用后继续下载,而且它还提供了断点续传、网络状况检查等功能,使得在移动...

Global site tag (gtag.js) - Google Analytics