栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Auto.js】给手机编一个模拟遥控器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Auto.js】给手机编一个模拟遥控器

目录
  • 一、问题引发
  • 二、初步尝试
    • KeyCode(code)
  • 三、再次尝试
    • shell(cmd[, root])
  • 四、调用 Java
  • 五、附加

一、问题引发

本来想给自家的智能电视做个 APP,但家里人要看电视,我又没有电脑,全靠 AIDE 在手机上敲代码,运行测试也是。看来踏入 TV 开发的第一步都有困难。而电视与手机的最大区别在于电视用遥控器操作,不能触屏,而手机可以触屏。于是我想到了 Auto.js,可以用它写一个遥控器浮窗脚本,在手机上模拟遥控器操作,如此模拟电视环境运行 APP。

二、初步尝试

由于安卓虚拟机的 Android TV 和 Google 官方的电视棒的遥控器与国内的有极大不同,没有 0-9 数字键,只有开关、方向键、OK 键,所以我只要做一个方向键盘就行了。参考了 Auto.js 给出用例脚本和之前的一个脚本,我写出了初始代码:

var window = floaty.window(

    
    
        

此处参阅 Auto.js 文档中 KeyCode 的用法:

KeyCode(code)
  • code | 要按下的按键的数字代码或名称。参见下表。 模拟物理按键。例如KeyCode(29)和KeyCode("KEYCODE_A")是按下A键。

查阅键表,找到需要的方向键及键值:

名称代码
KEYCODE_DPAD_UP19
KEYCODE_DPAD_DOWN20
KEYCODE_DPAD_LEFT21
KEYCODE_DPAD_RIGHT22
KEYCODE_DPAD_CENTER23

初步测试。。。失败

三、再次尝试

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/

声明:未经作者允许禁止转载。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/978769.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号