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

Android Compose中NotificationListenerService.onNotificationPosted未触发排查

解决NotificationListenerService.onNotificationPosted未调用的问题
  • 必须引导用户手动开启通知监听权限
    通知监听权限不属于普通运行时权限,无法通过代码直接申请,必须让用户跳转到系统的「通知访问」设置页面为你的应用开启权限。哪怕你启动了服务,没有这个权限系统也不会把通知推送给你的服务。
    跳转设置页的代码示例:

    val intent = Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS")
    startActivity(intent)
    

    用户开启权限后,系统才会真正绑定你的NotificationListenerService,onNotificationPosted方法才会被触发。

  • 检查AndroidManifest.xml的服务声明是否正确
    确保服务配置包含必填的权限和Intent Filter,缺一不可:

    <service
        android:name=".MyNotificationListenerService"
        android:exported="true"
        android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
        <intent-filter>
            <action android:name="android.service.notification.NotificationListenerService" />
        </intent-filter>
    </service>
    

    注意:android:permission必须严格写为android.permission.BIND_NOTIFICATION_LISTENER_SERVICE,Intent Filter的Action也不能写错,android:exported="true"是系统绑定服务的必要条件。

  • 避免系统后台限制影响服务运行
    部分国产安卓厂商(小米、华为、OPPO等)有严格的后台管理策略,可能会限制NotificationListenerService的运行。需要引导用户操作:

    1. 将应用加入后台白名单
    2. 关闭应用的电池优化,跳转代码示例:
      val intent = Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)
      startActivity(intent)
      

    另外不要手动调用startService启动该服务,系统会在用户开启权限后自动绑定并启动服务,手动启动的服务无法接收通知推送。

  • 验证测试通知的有效性
    部分通知不会被监听,测试时尽量避开以下情况:

    • 应用自身发送的通知(部分系统版本存在限制)
    • 已被用户屏蔽通知渠道的通知
    • 系统级低优先级通知
      可以用其他应用(如微信、短信)发送通知,或者自己写测试代码发送通知验证:
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    val testChannel = NotificationChannel("test_channel", "测试渠道", NotificationManager.IMPORTANCE_DEFAULT)
    notificationManager.createNotificationChannel(testChannel)
    val testNotification = NotificationCompat.Builder(this, "test_channel")
        .setContentTitle("测试通知")
        .setContentText("用于验证通知监听的测试内容")
        .setSmallIcon(R.drawable.ic_notification)
        .build()
    notificationManager.notify(1, testNotification)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:12:10