KunSpace
返回作品
UEventDemo 系统事件监测
AndroidUEvent语音唤醒系统应用

UEventDemo 系统事件监测

面向 Android 的系统 UEvent 监测 Demo:订阅内核/驱动事件并精准判定与反馈;内置语音唤醒等业务示例,可扩展到其他硬件事件。

2025年3月15日源码

项目简介

UEventDemo 是面向 Android 设备的 系统 UEvent 事件监测 Demo:通过监听内核 / 驱动上报的 UEvent,对各类事件做精准判断与反馈。仓库内置了语音唤醒(如 OK Freebox)等业务示例,也可按同样方式扩展到其他事件。

源码见 GitHub — UEventDemo

能做什么

  • 通用 UEvent 监测 — 基于 UEventObserver 订阅指定 DEVPATH,解析字段(如 AUDIO_FORMAT),按规则判定并回调
  • 业务示例:语音唤醒 — 识别 Freebox 等唤醒码并弹窗 / 通知(示例能力,不是唯一用途)
  • 测试会话计数 — 「开始计数 / 停止计数」,离开页面后仍可在后台累计命中
  • 后台常驻 — 前台服务保持进程,便于持续监听
  • 开机与冷启动参数 — 可选延迟设置音频相关参数(如 KWS 模型),降低初始化竞态

工作原理(简要)

  1. 应用层注册 UEventObserver,按 DEVPATH=... 过滤关心的设备节点
  2. 收到 uevent 后读取字段(示例中为 AUDIO_FORMAT
  3. 命中规则则触发反馈(弹窗、通知)并更新计数

你可以把「监听路径 + 字段匹配规则 + 回调动作」换成其他硬件 / 驱动事件。

当前示例:音频相关监听路径

  • 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_COMPLETEDPOST_NOTIFICATIONSFOREGROUND_SERVICE

使用说明

  1. Android Studio 打开工程,连接能收到对应驱动 uevent 的真机
  2. 以系统签名安装
  3. 开启通知权限 → Start counting → 触发事件(如唤醒词)→ 观察弹窗 / 计数 → Stop counting
  4. 监控其他事件:改 UEventMonitor 的路径与匹配规则即可
gradlew.bat assembleDebug   # Windows
./gradlew assembleDebug     # macOS / Linux

注意

普通第三方签名通常无法使用 android.uid.system;事件能否收到取决于设备侧驱动 / HAL 是否上报,公版模拟器往往不具备相同环境。

UEventDemo 系统事件监测 — KunSpace · KunSpace