Android 应用如何监听并获取其他应用的通知内容(含文本、图标等信息)

通过实现 notificationlistenerservice,android 应用可在用户授权后实时监听系统中所有已发布通知,获取其标题、内容、包名、时间、甚至自定义视图中的文本与图片资源(需适配解析逻辑)。

在 Android 中,从 API 18(Android 4.3)起,系统提供了 NotificationListenerService 机制,允许具备相应权限的应用监听、读取和管理设备上其他应用发出的通知。这为构建通知聚合器、无障碍辅助工具或消息同步类应用提供了核心能力。

✅ 基本使用步骤

  1. 声明服务并配置权限
    在 AndroidManifest.xml 中注册服务,并声明必要权限:

    
        
    
  1. 继承 NotificationListenerService 并重写关键方法
    示例 Kotlin 实现:
class MyNotificationListenerService : NotificationListenerService() {

    override fun onNotificationPosted(sbn: StatusBarNotification, rankingMap: RankingMap) {
        val packageName = sbn.packageName
        val notification = sbn.notification

        // 提取标准字段(兼容大多数通知)
        val title = notification.extras.getCharSequence(Notification.EXTRA_TITLE)?.toString() ?: ""
        val text = notification.extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() ?: ""
        val subText = notification.extras.getCharSequence(Notification.EXTRA_SUB_TEXT)?.toString() ?: ""

        // 获取通知时间(毫秒时间戳)
        val postTime = sbn.postTime

        // 日志或本地处理
        Log.d("NotifL

istener", "[$packageName] $title — $text (at $postTime)") } override fun onNotificationRemoved(sbn: StatusBarNotification, rankingMap: RankingMap) { Log.d("NotifListener", "Removed: ${sbn.packageName}") } }
  1. 引导用户手动开启通知访问权限
    该服务需用户显式授权,无法动态申请。需跳转至系统设置页:
// 检查是否已启用
val enabled = Settings.Secure.getString(
    contentResolver,
    "enabled_notification_listeners"
).contains(packageName)

if (!enabled) {
    Toast.makeText(this, "请在设置中启用本应用的通知访问权限", Toast.LENGTH_LONG).show()
    startActivity(Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS))
}

⚠️ 注意事项与限制

  • 权限敏感性高:BIND_NOTIFICATION_LISTENER_SERVICE 是系统级权限,仅允许绑定服务,不开放给第三方直接声明;实际启用依赖用户手动授权。
  • 隐私与合规要求:自 Android 8.0(API 26)起,Google Play 强制要求声明数据安全表(Data Safety Form),明确说明“读取通知”属于敏感行为,需向用户清晰披露用途。
  • 自定义通知内容需解析 RemoteViews:若通知使用了 setCustomContentView(),其文本/图片无法通过 extras 直接获取,需调用 notification.contentView?.apply { }(需反射或兼容性处理),且受限于 Android 版本与签名验证(部分厂商 ROM 可能屏蔽)。
  • 后台限制增强:Android 9+ 对后台服务更严格,NotificationListenerService 本身由系统托管,不受常规后台限制影响,但仍需避免在 onNotificationPosted 中执行耗时操作(如网络请求、磁盘写入),建议交由 WorkManager 或 CoroutineScope 异步处理。

✅ 总结

NotificationListenerService 是 Android 官方支持的、唯一合法获取其他应用通知元数据的标准方案。它适用于需要响应式感知通知场景(如智能手表同步、语音播报、防沉迷提醒等),但开发者必须尊重用户隐私、严格遵循权限最小化原则,并做好各 Android 版本及 OEM 定制系统的兼容性测试。切勿尝试绕过该机制(如无障碍服务模拟、Xposed 插件等),既违反政策也存在严重安全与稳定性风险。