Android 系统下载 DownloadManager

Android DownloadManager简介及使用
摘要由CSDN通过智能技术生成

 一、所需权限

<uses-permission android:name="android.permission.INTERNET" />
<!--如果下载的文件是apk,下载完安装需要该权限-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

二、简介

DownloadManager是Android提供的一个系统服务,通过这个服务,我们可以将下载文件的任务委托给系统进行,无需我们做太多的工作。

官网DownloadManager文档链接

 三、使用

1.创建

val request = DownloadManager.Request(Uri.parse(url))
    //设置允许使用的网络类型
    .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI or DownloadManager.Request.NETWORK_MOBILE)
    //设置允许漫游
    .setAllowedOverRoaming(true)
    //设置文件格式
    .setMimeType(mimeType)
    //设置通知显示的时机
    // -下载中展示 VISIBILITY_VISIBLE(默认)
    // -下载中和完成时展示 VISIBILITY_VISIBLE_NOTIFY_COMPLETED
    // -下载完成时展示 VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION
    // -不展示 VISIBILITY_HIDDEN
    .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
    //设置通知的标题
    .setTitle(getFileName(url))
    //设置通知的描述信息
    .setDescription(LOADING_TEXT).also {
        //设置下载地址
        context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)?.mkdirs()
        it.setDestinationInExternalFilesDir(
            context,
            Environment.DIRECTORY_DOWNLOADS,
            getFileName(url)
        )
    }
downloadId = downloadManager?.enqueue(request)!!

2.注册广播,监听下载状态

val intentFilter = IntentFilter()
intentFilter.addAction(DownloadManager.ACTION_DOWNLOAD_COMPLETE)
intentFilter.addAction(DownloadManager.ACTION_VIEW_DOWNLOADS)
intentFilter.addAction(DownloadManager.ACTION_NOTIFICATION_CLICKED)
val downLoadReceiver = DownLoadReceiver()
context.registerReceiver(downLoadReceiver, intentFilter)

下载完成时,发送的广播。
对应的Action为:ACTION_DOWNLOAD_COMPLETE
下载过程中Notification被点击时发送的广播。
对应的Action为:ACTION_NOTIFICATION_CLICKED
查看所有下载情况的广播。
对应的Action为:ACTION_VIEW_DOWNLOADS

3.完整代码

以apk下载为例,下载完成后自动安装

package com.mine.common.tools

import android.Manifest
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.Build
import android.os.Environment
import android.provider.Settings
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompat
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值