项目简介
UEventDemo 是面向 Android 设备的 系统 UEvent 事件监测 Demo:通过监听内核 / 驱动上报的 UEvent,对各类事件做精准判断与反馈。仓库内置了语音唤醒(如 OK Freebox)等业务示例,也可按同样方式扩展到其他事件。
能做什么
- 通用 UEvent 监测 — 基于
UEventObserver订阅指定DEVPATH,解析字段(如AUDIO_FORMAT),按规则判定并回调 - 业务示例:语音唤醒 — 识别 Freebox 等唤醒码并弹窗 / 通知(示例能力,不是唯一用途)
- 测试会话计数 — 「开始计数 / 停止计数」,离开页面后仍可在后台累计命中
- 后台常驻 — 前台服务保持进程,便于持续监听
- 开机与冷启动参数 — 可选延迟设置音频相关参数(如 KWS 模型),降低初始化竞态
工作原理(简要)
- 应用层注册
UEventObserver,按DEVPATH=...过滤关心的设备节点 - 收到 uevent 后读取字段(示例中为
AUDIO_FORMAT) - 命中规则则触发反馈(弹窗、通知)并更新计数
你可以把「监听路径 + 字段匹配规则 + 回调动作」换成其他硬件 / 驱动事件。
当前示例:音频相关监听路径
- Android 12 及以下:
/devices/platform/auge_sound - Android 13+:
/devices/platform/auge_sound/sound/card0/controlC0
示例判定:路径匹配且 AUDIO_FORMAT=32 时视为 OK Freebox 唤醒。核心在 UEventMonitor。
主要模块
com.nes.uevent.demo/
├── UEventDemoApplication # 注册监听、保活、可选音频参数
├── UEventMonitor # UEvent 观察与判定(可扩展)
├── MainActivity # 会话计数、通知状态
├── WakeFeedbackHelper # 弹窗 / 通知
├── WakeMonitorService # 前台保活
└── ElevocKwsBootReceiver # 开机广播示例
技术要点
| 项目 | 说明 |
|---|---|
| 包名 | com.nes.uevent.demo |
| SDK | minSdk 31 / targetSdk 34 |
| 权限 | 含 sharedUserId="android.uid.system",需以系统应用方式签名安装 |
| 其他 | RECEIVE_BOOT_COMPLETED、POST_NOTIFICATIONS、FOREGROUND_SERVICE |
使用说明
- Android Studio 打开工程,连接能收到对应驱动 uevent 的真机
- 以系统签名安装
- 开启通知权限 → Start counting → 触发事件(如唤醒词)→ 观察弹窗 / 计数 → Stop counting
- 监控其他事件:改
UEventMonitor的路径与匹配规则即可
gradlew.bat assembleDebug # Windows
./gradlew assembleDebug # macOS / Linux
注意
普通第三方签名通常无法使用 android.uid.system;事件能否收到取决于设备侧驱动 / HAL 是否上报,公版模拟器往往不具备相同环境。
