You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 13中DownloadManager通知无法显示问题求助

Android API 33 下 DownloadManager 通知不显示问题修复

问题原因

Android API 33 新增了POST_NOTIFICATIONS权限,所有应用发送通知都必须先获取该权限——低版本系统无此要求,你的代码未处理该权限逻辑,导致API33及以上系统中DownloadManager的通知无法正常弹出。

修复步骤

  1. 在AndroidManifest.xml中声明权限
    添加权限声明:

    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    

    该权限属于危险权限,仅声明无法生效,必须动态申请。

  2. 动态申请POST_NOTIFICATIONS权限
    在发起下载前先检查并申请权限:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
            registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
                if (granted) {
                    startDownload()
                } else {
                    Toast.makeText(this, "需要通知权限才能显示下载通知", Toast.LENGTH_SHORT).show()
                }
            }.launch(Manifest.permission.POST_NOTIFICATIONS)
            return
        }
    }
    startDownload()
    
  3. 封装下载逻辑
    将原下载代码封装为单独方法,方便权限通过后调用:

    private fun startDownload() {
        val downloadManager = getSystemService(DOWNLOAD_SERVICE) as DownloadManager
        val request = DownloadManager.Request(Uri.parse("https://xxx.xx"))
        val filename = "update" + System.currentTimeMillis()
        
        // 替代手动拼接路径的更简洁写法(API 19+支持)
        request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOWNLOADS, "$filename.apk")
        
        request.setTitle("dm-test")
        request.setDescription("downing...")
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
        request.setMimeType("application/vnd.android.package-archive")
        downloadManager.enqueue(request)
    }
    

额外提示

  • 若用户拒绝权限,可引导其前往应用设置页面手动开启通知权限;
  • API 29+系统推荐使用setDestinationInExternalFilesDir替代手动拼接文件路径,避免路径处理错误。

内容的提问来源于stack exchange,提问作者midai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:45:34