N1 除了斐讯自己的 T1 遥控,用第三方遥控器都会有一些开关机问题,包括:
- 遥控器电源键关机后,盒子随机无缘无故自启动。(对于 Webpad 2.2固件,可能因为 webpad 自带的用户态 reboot.apk 这个 app,卸载其即可). Update: 推测原因,N1关机(非直接断电)后蓝牙模块应该仍然在待机, 任何连接的蓝牙设备发的消息都会自动唤醒N1. 一些蓝牙干扰可能导致N1关机后自己开机.
- 遥控器电源键无法关机、或关机变重启(原因推测:系统把一次按键操作识别成两次,所以关机然后重开)。
- 遥控器电源键关机后,按遥控器任意键(非电源键)盒子都启动。
- 遥控器电源键关机后无法开机。(需要彻底断电一次再加电开机)
2,3 可能于斐讯官方固件的 PhiTvSettings.apk 和 Provision.apk 有关
/system/priv-app/PhiTvSettings/PhiTvSettings.apk
/system/priv-app/Provision/Provision.apk
任意蓝牙遥控器控制
获取蓝牙遥控器硬件类型id
adb shell
su
cat /proc/bus/input/devices
输出:
I: Bus=0005 Vendor=2717 Product=3200 Version=0213
其中的 Vendor 和 Product 就是蓝牙遥控器设备类型 id。
获取蓝牙遥控器按键键值:
getevent -l
然后按遥控器按键,终端会输出按键的键名(EV_KEY, 可能空白)和键值编码(MSC_SCAN,)。
/dev/input/event4: EV_KEY KEY_ENTER UP // 按键名称 KEY_ENTER
/dev/input/event4: EV_SYN SYN_REPORT 00000000
/dev/input/event4: EV_MSC MSC_SCAN 00070051 // 键值,即 0x00070051
修改 Android系统按键配置文件, /system/usr/keylayout/Generic.kl 默认键盘键值文件
或创建一个专有键盘配置文件 Vendor_2717_Product_3200.kl (建议从 Generic.kl 复制过来开始改)。
方法: rush 或 yyf 固件连接盒子 2223 端口 ssh (用户名和密码默认为 root:rush)
挂载系统分区为可写: mount -o rw,remount /system
然后即可写入 /system 里文件或用 scp 写入系统分区。
在新创建的键盘配置文件末尾加上:
# comment
key usage 0x70066 F1 # 映射 0x70066 为 F1。
将遥控器电源键键值映射为其它(除 POWER 以外)按键。用 Xposed edge 将指定的按键按键功能设为“关机”(命令行 reboot -p)。(因为 Xposed edge 和其它工具都不能更改电源按键 POWER 功能)
比如如果将遥控器“电源”键配置为 “F1”,则在 xposed edge pro 里将按键 KEYCODE_F1 功能设为 shell 命令 "reboot -p" (以root执行)即可关机。
其它 workaround
安装 “一键关机 app”,点击一次即关机。
测试用 reboot -p 关机后遥控可以开机。
Bug (?)
reboot -p 关机后,任何蓝牙设备都可以唤醒N1,不仅仅是遥控器任意按键,比如移动下蓝牙鼠标也会使N1开机。
也可以使用 “Button Mapper pro.apk”(按键映射) 这个 app 将任意按键(除电源键)的 单击/长按/双击 映射为关机(调用一键关机 app),这个不需要安装 xposed,原理是使用 Android 的 accessibility service。
关机 shell 命令
# 需要 root 权限
reboot -p # 关机
reboot # 重启
reboot update # 重启到 usb 启动(刷机或U盘引导模式)