- 一、问题引发
- 二、初步尝试
- KeyCode(code)
- 三、再次尝试
- shell(cmd[, root])
- 四、调用 Java
- 五、附加
本来想给自家的智能电视做个 APP,但家里人要看电视,我又没有电脑,全靠 AIDE 在手机上敲代码,运行测试也是。看来踏入 TV 开发的第一步都有困难。而电视与手机的最大区别在于电视用遥控器操作,不能触屏,而手机可以触屏。于是我想到了 Auto.js,可以用它写一个遥控器浮窗脚本,在手机上模拟遥控器操作,如此模拟电视环境运行 APP。
二、初步尝试由于安卓虚拟机的 Android TV 和 Google 官方的电视棒的遥控器与国内的有极大不同,没有 0-9 数字键,只有开关、方向键、OK 键,所以我只要做一个方向键盘就行了。参考了 Auto.js 给出用例脚本和之前的一个脚本,我写出了初始代码:
var window = floaty.window(); window.exitOnClose(); window.text.click(()=>{ window.setAdjustEnabled(!window.isAdjustEnabled()); }); window.ok.click(()=>{ KeyCode(23); }); window.left.click(()=>{ KeyCode(21); }); window.right.click(()=>{ KeyCode(22); }); window.up.click(()=>{ KeyCode(19); }); window.down.click(()=>{ KeyCode(20); }); setInterval(()=>{}, 1000);
此处参阅 Auto.js 文档中 KeyCode 的用法:
KeyCode(code)
- code
| 要按下的按键的数字代码或名称。参见下表。 模拟物理按键。例如KeyCode(29)和KeyCode("KEYCODE_A")是按下A键。
查阅键表,找到需要的方向键及键值:
| 名称 | 代码 |
|---|---|
| KEYCODE_DPAD_UP | 19 |
| KEYCODE_DPAD_DOWN | 20 |
| KEYCODE_DPAD_LEFT | 21 |
| KEYCODE_DPAD_RIGHT | 22 |
| KEYCODE_DPAD_CENTER | 23 |
初步测试。。。失败
三、再次尝试KeyCode(code) 是需要 root 权限的,我有 root,但不论怎么办,都运行失败。于是我想到了可以用 shell() 函数调用 input keyevent 来模拟按键。当然这也需要 root。
而参考文档:
shell(cmd[, root])
- cmd
要执行的命令 - root
是否以root权限运行,默认为false。
将所有 KeyCode(code) 换成 shell("input keyevent ",true),再次测试。。。失败
四、调用 Java我发现两次的日志很像,应该是同一个原因,可能 KeyCode(code) 就是对 shell("input keyevent ",true) 的一个封装吧。
毕竟 Auto.js 还可以调用 Java,所以改用 Java 的 java.lang.Runtime 来调用 Shell。
最后修改了一下,在原代码之前加了一些:
importClass("java.lang.Runtime");
function key(c){
try{
Runtime.getRuntime().exec(["/system/xbin/su","-c","input keyevent "+c]);
}catch(e){
}
}
然后把所有 shell() 函数换成 key(),再次测试。。。成功
效果图:
果然,Java 才是王道。
文件源码:遥控器.js
Auto.js 文档:https://pro.autojs.org/docs/
声明:未经作者允许禁止转载。



