Android 系统通知监听技术实践

灵犀安全 · 基于 NotificationListenerService 构建实时反诈感知能力

一、背景

随着电信诈骗手段不断升级,传统的用户主动检测方式已经无法满足实时防护需求。

例如:

这些方式存在明显滞后性。

因此,在"灵犀安全"反诈 App 的设计中,我希望实现一种主动式安全防护机制

在用户无感知的情况下,实时监听系统通知内容,对潜在诈骗信息进行 AI 风险分析,并及时向用户以及绑定守护人发送预警。

整体架构如下:

手机系统通知
       |
       ↓
NotificationListenerService
       |
       ↓
原生 Android 插件
       |
       ↓
UniApp 前端
       |
       ↓
RAG 风险分析服务
       |
       ↓
WebSocket实时推送结果
       |
       ↓
风险提醒 / 守护通知

二、为什么选择 NotificationListenerService?

Android 系统中的通知属于系统级事件,普通 App 无法直接读取其他应用通知。

例如:

如果想获取这些内容,需要使用 Android 提供的:

NotificationListenerService

它是 Android 4.3(API 18) 引入的系统服务。

它允许应用监听设备上的通知变化。

主要能力:

能力 说明
监听通知发送 收到新通知时触发
获取通知来源 知道哪个 App 产生通知
获取通知文本 读取标题和内容
监听通知撤回 通知取消事件

三、NotificationListenerService 工作流程

整体流程:

Android System
      |
      |
Notification Manager
      |
      |
NotificationListenerService
      |
      |
onNotificationPosted()
      |
      |
解析Notification
      |
      |
数据上传服务器

当手机收到一条通知:

例如:

微信:

【XX银行】
您的账户异常,请点击链接验证身份:
http://xxx.com

系统会调用:

onNotificationPosted(StatusBarNotification sbn)

开发者可以从参数中获取通知对象。


四、核心实现

1. 创建 NotificationListenerService

Android 原生代码:

class MyNotificationListenerService :
    NotificationListenerService() {


    override fun onNotificationPosted(
        sbn: StatusBarNotification
    ) {

        val packageName =
            sbn.packageName


        val notification =
            sbn.notification


        val extras =
            notification.extras


        val title =
            extras.getString(
                Notification.EXTRA_TITLE
            )


        val text =
            extras.getString(
                Notification.EXTRA_TEXT
            )


        Log.d(
            "Notify",
            "$packageName $title $text"
        )
    }


}

当任何应用产生通知时:

onNotificationPosted()

都会被触发。


五、注册系统服务

Service 必须在 AndroidManifest.xml 中声明。

<service
    android:name=".MyNotificationListenerService"
    android:label="通知监听服务"
    android:permission=
    "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">


    <intent-filter>

        <action
        android:name=
        "android.service.notification.NotificationListenerService"/>

    </intent-filter>


</service>

关键权限:

android.permission.BIND_NOTIFICATION_LISTENER_SERVICE

它告诉 Android:

该 Service 需要访问系统通知。

六、用户授权机制

Android 不允许 App 静默开启通知监听。

必须让用户手动授权。

跳转系统设置:

startActivity(
 Intent(
 Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS
 )
)

用户开启:

设置
 ↓
通知使用权
 ↓
灵犀安全
 ↓
允许

之后系统才会回调通知。


七、UniApp + Android 原生插件通信

由于项目采用:

UniApp + UTS

开发 Android 应用。

但是:

UniApp 本身无法直接调用:

NotificationListenerService

因此采用:

UniApp
 |
 |
UTS插件
 |
 |
Kotlin原生代码
 |
 |
Android系统API

架构:

index.uvue

    |
    |
notificationGuard

    |
    |
MyNotificationListenerService.kt

    |
    |
Android Framework

八、UTS 插件封装

原生插件暴露方法:

object NotificationGuard {


    fun start(){

        // 启动监听逻辑

    }


    fun getStatus():Boolean{

        return true

    }

}

UniApp 调用:

import {
 notificationGuard
}
from "@/uni_modules/notificationGuard"


notificationGuard.start()

这样前端无需关注 Android 底层实现。


九、通知数据处理

监听到通知后,需要进行数据清洗。

原始数据:

{
 "package":
 "com.tencent.mm",

 "title":
 "微信",

 "content":
 "您的账户被冻结,请点击链接"
}

转换:

{
 "type":"notification",

 "source":"微信",

 "content":
 "您的账户被冻结,请点击链接",

 "timestamp":
 1781234567
}

然后发送给后端。


十、接入 RAG 风险分析系统

在反诈 App 中,通知监听并不是最终目的。

核心目标:

自动发现诈骗风险。

因此通知数据会进入 RAG 风险分析流程。

整体链路:

通知监听

 ↓

文本提取

 ↓

风险知识库检索

 ↓

LLM语义分析

 ↓

风险等级判断

 ↓

WebSocket返回结果

例如:

输入:

客服通知:
您的账户涉嫌违规,
请下载安全软件处理

RAG:

检索:

冒充客服诈骗案例库
远程控制诈骗案例库

模型分析:

返回:

{
 "riskLevel":"HIGH",

 "reason":
 "疑似冒充客服诈骗",

 "suggestion":
 "立即停止操作"
}

十一、WebSocket实时风险推送

因为风险分析是异步任务:

POST提交分析

返回taskId

后台AI分析

WebSocket推送结果

流程:

App

 |
 |
提交通知内容

 |
 |
RAG服务

 |
 |
taskId

 |
 |
WebSocket

 |
 |
风险结果

例如:

{
"type":
"RAG_RESULT",

"riskLevel":
"HIGH",

"message":
"发现诈骗风险"
}

App收到:

HIGH

↓

播放风险警告音

↓

弹窗提醒

↓

通知守护人

十二、后台持续监听问题

Android 系统对于后台运行限制非常严格。

主要问题:

1. Doze模式

Android 进入休眠后:

解决:

使用:

NotificationListenerService
+
前台服务
+
厂商后台权限

2. 应用被杀问题

部分厂商:

例如:

会主动清理后台。

因此需要:

引导用户开启:

后台运行权限

自启动权限

电池优化白名单

十三、隐私安全设计

通知监听涉及高度敏感数据。

因此设计:

1. 最小化采集

只上传:

通知文本

风险相关字段

不上传:

联系人

账号密码

完整聊天记录

2. 数据脱敏

例如:

原始:

您的银行卡6222 8888 9999 0000被冻结

处理:

您的银行卡 ****0000被冻结

3. 用户可控

提供:

通知监听开关

风险检测开关

数据删除功能

十四、技术总结

通过 Android 原生能力与跨端框架结合,实现了一套主动式反诈感知系统:

核心技术:

模块 技术
移动端 UniApp + UTS
系统通知监听 NotificationListenerService
Android通信 Native Plugin
实时通信 WebSocket
AI分析 RAG + LLM
后台运行 Foreground Service
风险推送 异步任务架构

相比传统安全检测:

用户发现诈骗
       ↓
主动检测
       ↓
获得结果

该方案:

系统产生风险信息

       ↓

自动捕获

       ↓

AI实时分析

       ↓

主动预警

实现了从:

"用户发现风险"

到:

"系统提前发现风险"

的转变。


后续优化方向

未来可以进一步扩展:

  1. 剪贴板实时检测

监听用户复制内容:

银行卡号
网址
转账信息

自动分析风险。

  1. 多模态诈骗检测

加入:

  1. 端侧模型推理

使用:

降低隐私风险。


总结

Android 系统通知监听是移动端安全应用的重要能力。

通过:

NotificationListenerService + UniApp UTS 原生插件 + RAG 风险分析 + WebSocket实时推送

可以构建一个真正意义上的实时智能反诈助手。

在"灵犀安全"项目中,该技术成为连接系统事件感知层AI决策层的重要桥梁,也是整个主动防护体系的核心入口。

← 返回首页