小米Android13/14设备下载APK时NotificationListenerService无法连接求助
检查MIUI专属的通知权限限制
进入「设置→应用设置→权限管理→权限→通知使用权」,确认应用权限开启的同时,还要关闭系统针对该应用的「智能拦截通知」功能;部分机型需在「安全中心→隐私保护→特殊权限设置→通知使用权」里二次确认权限状态。适配系统下载通知的渠道规则
小米/红米的系统下载APK通知属于系统级通知,代码中不要仅过滤自定义通知渠道,需确保监听所有渠道,或明确添加系统下载管理器的包名com.android.providers.downloads对应的通知渠道。解除MIUI的后台管控限制
进入「设置→应用设置→应用管理→你的应用→省电策略」,将省电模式设为「无限制」;同时把应用加入「后台弹出界面」权限列表,避免系统在下载过程中终止服务进程。针对APK下载场景的回调适配
系统下载APK时,通知可能会被临时替换或隐藏,需同时重写onNotificationRemoved()和onNotificationPosted()方法,通过包名com.android.providers.downloads或通知标题关键字(如「下载」「APK」)识别目标通知。重新触发权限绑定
即便已获取BIND_NOTIFICATION_LISTENER_SERVICE权限,MIUI可能存在权限生效延迟。应用启动时主动检查权限状态,若权限开启但服务未连接,引导用户关闭再重新开启通知使用权,触发系统重新绑定服务。检查权限的代码示例:private boolean isNotificationListenerEnabled() { String pkgName = getPackageName(); String flat = Settings.Secure.getString(getContentResolver(), "enabled_notification_listeners"); return flat != null && flat.contains(pkgName); }排查通知本身的可监听性
先测试监听微信、短信等第三方应用通知,若正常则说明服务本身无问题;再用ADB命令查看下载APK通知的详细参数:adb shell dumpsys notification从输出中找到对应通知条目,核对服务的监听规则是否匹配该通知的包名、渠道ID等信息。
内容的提问来源于stack exchange,提问作者Gaker

