Android 13中DownloadManager通知无法显示问题求助
Android API 33 下 DownloadManager 通知不显示问题修复
问题原因
Android API 33 新增了POST_NOTIFICATIONS权限,所有应用发送通知都必须先获取该权限——低版本系统无此要求,你的代码未处理该权限逻辑,导致API33及以上系统中DownloadManager的通知无法正常弹出。
修复步骤
在AndroidManifest.xml中声明权限
添加权限声明:<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />该权限属于危险权限,仅声明无法生效,必须动态申请。
动态申请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()封装下载逻辑
将原下载代码封装为单独方法,方便权限通过后调用: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
相关产品推荐
相关产品推荐

