pengchujin:米家 App 的 Home 事件未进入 Aerial Home Guard
在 Aerial-TV issue #933 的回复中,pengchujin 解释 Android 6 小米电视上实体遥控器的 Home 会在按键阶段被 Aerial 截获,但米家 App 的虚拟 Home 不经过同一路径;当前每秒一次的用量统计兜底只识别 PatchWall 的 `MainActivityUserMode`。他要求对比 ActivityManager、当前焦点和 usage stats 日志,以判断米家打开的是 PatchWall 其他页面还是另一种启动方式,再评估如何接入而不误伤儿童模式等页面。
作者原文@pengchujin谢谢这么细的反馈,#931 的验证也很有用。
先说为什么会这样:这类 Android 6 小米电视上,PatchWall 到前台时不会通知 Aerial,实体遥控器的 Home 是在按键阶段就被 Aerial 截下的。米家 App 的 Home 不是从遥控器硬件进来的,截不到。剩下的兜底是每秒看一次「用量统计」,但它只认 PatchWall 的主页(
com.mitv.tvhome.MainActivityUserMode)。你那边没有拉回来,我猜是米家打开的是 PatchWall 的另一个页面,或者用了别的方式启动,需要你帮忙确认一下。你有 ADB,麻烦这样做:
- Aerial 在前台时先清一下日志:
sh adb logcat -c- 用米家 App 按一次 Home,停在 PatchWall 后执行:
sh adb logcat -d -v time -s ActivityManager:I AerialGuard:* > mihome-home.txt adb shell dumpsys activity activities | grep -E "mFocusedActivity|mResumedActivity" adb shell dumpsys usagestats | grep -i tvhome | tail -20- 把这三条的输出贴上来。最好再用实体遥控器按一次 Home 做对比,也把第 1、2 步跑一遍贴上来。
最关键的是
ActivityManager里那条START u0 {...},能看出米家是怎么打开 PatchWall 的。拿到之后我再看能不能在不误伤 PatchWall 其他页面(比如儿童模式)的前提下,把这条路也接住。