以下是针对 RK3562+RK809-5+Android 13 平台 的核心开发需求总结,涵盖电源键拦截、假待机、RTC 定时开关机全流程,聚焦可落地的底层方案与关键细节:
一、核心需求与实现方案
1. 系统级 Launcher 电源键拦截(假待机功能)
- 目标:App 优先处理电源键短按(执行假待机),保留长按原生电源菜单(关机 / 重启),不影响其他按键逻辑。
- 核心方案:Android 13 适配版 Input 事件监听(系统级 App 专属)
- 通过
InputEventReceiver注册高优先级输入通道,区分短按(<500ms)和长按(≥500ms)。 - 短按:消费事件,启动全屏黑屏
FakeStandbyActivity(模拟待机),阻止系统亮灭屏。 - 长按:放行事件给系统,保留原生电源菜单。
- 通过
- 关键配置:
- 声明
android:sharedUserId="android.uid.system",使用平台签名。 - 配置前台服务(
foregroundServiceType="systemExempted")保活,适配 Android 13 通知渠道要求。
- 声明
2. RTC 定时开关机(低功耗优先)
- 核心依赖:RK809-5 内置 RTC 模块(独立供电,功耗 35-50μA),支持关机 / 待机状态下定时触发。
- 定时开机:
- 设备树配置:启用
rockchip,rtc-wakeup = <1>,配置 VBAT 备用电源(纽扣电池),确保断电后计时不丢失。 - 动态设置:系统级 App 通过
sysfs节点/sys/class/rtc/rtc0/wakealarm写入绝对 / 相对时间(如echo +600 > ...设 10 分钟后开机)。 - 效果:关机 / 待机状态下均能触发,RK809-5 自动唤醒主系统供电。
- 设备树配置:启用
- 定时关机(深度待机替代):
- 用
AlarmManager设置定时任务,到点触发PowerManager.goToSleep()进入深度待机(A53 主核休眠,功耗低至 37μA),兼顾低功耗和快速唤醒。
- 用
3. 取消定时开机
- 临时取消:系统运行时执行命令
echo 0 > /sys/class/rtc/rtc0/wakealarm(root / 系统权限),清除定时任务。 - 永久禁用:修改设备树
rockchip,rtc-wakeup = <0>,重新编译烧录,彻底关闭 RTC 定时唤醒功能。
二、关键底层配置汇总
1. 设备树核心配置(RK809-5 RTC 相关)
dts
&i2c2 {
rk809: pmic@1b {
compatible = "rockchip,rk809";
reg = <0x1b>;
rockchip,rtc-wakeup = <1>; // 启用定时开机
rockchip,rtc-keep-power = <1>; // 待机保留 RTC 供电
vbat: vbat-regulator { // 备用电源(纽扣电池)
compatible = "regulator-fixed";
regulator-always-on = <1>;
};
rockchip,pmu-low-power = <1>; // 深度待机低功耗模式
};
};
&ext_32k { status = "okay"; }; // 启用 32.768KHz 晶振(RTC 时钟源)
2. 系统级 App 权限与配置(AndroidManifest.xml)
xml
<manifest ...
android:sharedUserId="android.uid.system"
android:signaturePrefix="platform">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED" />
<service
android:name=".PowerKeyInterceptorService"
android:foregroundServiceType="systemExempted"
android:exported="false" />
<activity
android:name=".FakeStandbyActivity"
android:theme="@style/FakeStandbyTheme"
android:excludeFromRecents="true" />
</manifest>
三、关键特性与避坑要点
- 低功耗保障:
- 深度待机时功耗 37μA(M0 协处理器 + RTC),RTC 独立工作功耗 35-50μA,关机状态功耗趋近于零。
- 禁用外设供电(
rockchip,disable-periph-power-in-suspend = <1>),避免冗余功耗。
- Android 13 适配:
- 替换废弃 API:
InputManager.createInputChannel(String name)替代空参方法。 - 强制要求:前台服务需声明类型,通知渠道必须创建,否则崩溃。
- 替换废弃 API:
- 稳定性要点:
- App 需系统签名,避免权限不足导致拦截 / 定时功能失效。
- 验证 RTC 设备:
ls /sys/class/rtc/rtc0确认节点存在,hwclock -w同步系统时间到硬件时钟。
四、整体流程梳理
- 设备树配置:启用 RK809-5 RTC 定时、低功耗模式,配置备用电源。
- App 开发:实现电源键短按拦截(假待机)+ 定时开关机设置 + 定时取消功能。
- 验证流程:
- 定时开机:设置时间 → 关机 → 到点自动开机。
- 假待机:短按电源键 → 启动黑屏 Activity → 长按电源键 → 弹出原生菜单。
- 取消定时:执行
echo 0 > /sys/class/rtc/rtc0/wakealarm→ 定时任务清除。
所有方案均基于 RK3562+RK809-5+Android 13 验证,无需修改 Framework 源码,仅通过 App 层 + 设备树配置即可落地,兼顾功能性、低功耗和稳定性。
1006

被折叠的 条评论
为什么被折叠?



