近期为公司投影开发了一款遥控器app,这里是从方案调研到开发的总结。
手机信号传输方式
- 手机信号传输到投影仪Launcher的方式应该有三种,分别是蓝牙,红外线,网络协议。
- 考虑到部分安卓设备配有红外线,但不支持苹果手机,首先排除该方案。
- 蓝牙方案未深入调研,Android 添加蓝牙遥控按键。
- 网络协议方案,参考悟空遥控。需要开发client端运行在手机上,负责模拟按键信号发送,以及运行在投影设备的server端,建立一个socket长连接供client连接,然后接收client端的信号,以及执行模拟按键。
- 原理及参考方案:TvRemoteController
模拟按键
- 模拟按键根据调研情况,选择Instrumentation的方式来实现。
- adb shell input
- 需要root权限,执行效率慢(200ms)
- monkey
- 稳定性不高
- Instrumentation
- 安卓测试框,必须获得系统签名才能控制所有程序,需要自行编译Android系统
- sendevent
- 需匹配不同机型
- AccessibilityService
- 盲人模式,需定制app开发,成本高
- adb shell input
- android 跨进程点击方式总结
- Android随笔之——模拟按键操作的几种方式
重签名
- 在正常开发完成后,发现打开server完成连接后,当server处于前台时,上下左右和返回按钮可以生效,但关机、home键、设置页点击无效。
- 调研发现是因为app权限不够,必须将app的权限提高为系统权限,才能实现后台不被杀死,且可控制其他app。
- 如何用android:sharedUserId属性生成带有系统权限的apk?