目录

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

一、问题引发

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

二、初步尝试

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

var window = floaty.window(
<vertical><text id="text" text="ADJUST" textSize="16sp"/><relative layout_width="match_parent" layout_height="match_parent"><buttonid="ok"text="OK"layout_width="48dp"layout_centerInParent="true"/><button id="left"text="左"layout_toLeftOf="ok"layout_width="48dp"layout_centerVertical="true"/><button id="right"text="右"layout_toRightOf="ok"layout_width="48dp"layout_centerVertical="true"/><button id="up"text="上"layout_above="ok"layout_width="48dp"layout_centerHorizontal="true"/><button id="down"text="下"layout_below="ok"layout_width="48dp"layout_centerHorizontal="true"/></relative></vertical>
);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 <number> | 要按下的按键的数字代码或名称。参见下表。 模拟物理按键。例如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 <code> 来模拟按键。当然这也需要 root。
而参考文档:

shell(cmd[, root])

  • cmd <string> 要执行的命令
  • root <Boolean> 是否以root权限运行,默认为false。

将所有 KeyCode(code) 换成 shell("input keyevent <code>",true),再次测试。。。失败

四、调用 Java

我发现两次的日志很像,应该是同一个原因,可能 KeyCode(code) 就是对 shell("input keyevent <code>",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/

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

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

  1. 手机自动化测试工具Auto.js学习使用(附一个自动刷抖音类短视频的demo)

    Auto.js学习使用 介绍 使用 1. 手机端安装auto.js 2.电脑下载vscode,安装插件 3.手机打开远程开发功能 4. vscode连接手机 5.进行开发(一个自动刷抖音类短视频的de ...

  2. auto.js自动化手机脚本初始配置

    软件选择: auto.js 8.0pro版本(对比4.0版本有阉割,微信支付宝不能点)有两种模式: 客户端模式 服务器模式 auto.js 4.0版本有一种模式: 客户端模式 设备和电脑连接: 手机: ...

  3. Auto.js学习笔记4—按键模拟

    Keys 按键模拟部分提供了一些模拟物理按键的全局函数,包括Home.音量键.照相键等,有的函数依赖于无障碍服务,有的函数依赖于root权限 一般来说,以大写字母开头的函数都依赖于root权限,执行此 ...

  4. auto.js去除手机顶部状态栏的绿色部分

    人狠话不多,直接上代码, 'ui';/** 作者:美美*///去除状态栏顶部的绿色,此方法在安卓7-10有效果,安卓11无效activity.window.addFlags(android.view. ...

  5. js微信抢红包脚本代码_基于Auto.js的微信红包监测

    前段时间接触了下Auto.js(https://github.com/hyb1996/Auto.js),很好上手而且挺有意思,于是写了个微信红包监测脚本 大概思路是,不断获取手机屏幕截图,发现新消息则 ...

  6. Auto.js Pro如何连接VS Code插件

    由于Auto.js Pro的插件更新,原插件使用方式已经不适合新插件,现推出此教程. 准备Auto.js Pro 你首先需要一个Auto.js Pro.Pro是付费软件,如果你还没购买,请访问 htt ...

  7. Auto.js学习笔记1:开发需要准备什么工具和编程语言知识?

    什么是Auto.js? 根据官方文档定义:Auto.js是一款无需root权限的JavaScript自动化软件. Auto.js是一款安卓手机的应用主要用webview,和微信一样,安装在手机上: A ...

  8. 一文秒懂Auto.js免Root自动化脚本开发

    一文秒懂Auto.js免Root自动化脚本开发 一.手机端安装Auto.js app 放一个免费版本链接,功能足够使用 链接:https://pan.baidu.com/s/1AQT6tDGdl9FW ...

  9. 使用auto.js实现自动化每日打卡

    使用auto.js实现自动化每日打卡 疫情原因,需要在家每天定时打卡,每天刚起床的时候避免不了出现注意力不集中或者是看不到app,点不到按钮什么的(我瞎说的). 所以,就想搞一个自动化操作的东西,省去 ...

最新文章

  1. 香帅的北大金融学课笔记16 -- 公司决策
  2. gradle 上传jar包_gradle 打包jar上传到nexus 同时上传源码jar
  3. linux在双系统中消失了,双系统重新安装windows后,ubuntu选项消失
  4. 关于gitgithub的操作
  5. 查看 linux 硬件信息:内存、分区、系统、环境变量、防火墙、路由、端口监听、进程、CPU...
  6. 美国人用什么android手机,美国过半消费者使用智能手机 Android占48.5%
  7. Atitit spirngboot 访问 html文件总结 自设计web服务器原理与实现 Url路由压力,读取url,获得项目更路径绝对路径,拼接为文件路径。读取文建内容输出即可 目录路径 u
  8. 单片机c语言控制直流电机转速,一个用单片机控制直流电机的PWM调速程序
  9. windows10关闭防火墙
  10. 让数据填报、收集效率提升80%!这个报表工具真的太强大了
  11. Altium Designer--如何隐藏连线
  12. 无人机的微分平坦性详细推导+Mini snap
  13. Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)
  14. Maxon将在Siggraph 2019公布下一代Cinema 4D RELEASE 21
  15. 交叉编译openssl到aarch64
  16. Vulnhub_Beelzebub
  17. 计算机学院学生会会徽,学生会会徽策划书
  18. CAN总线转光纤/CAN光端机在海湾消防报警主机联网中应用
  19. USDP使用笔记(三)大数据集群及组件启停
  20. arcgis-ps-cad联合出图控制

热门文章

  1. 一个不错的故事(上)
  2. java file.separator_关于Java的File.separator
  3. PIXHAWK飞控的外部控制
  4. MacBook不接电源实现外接显示器功能
  5. JavaScript的callee 属性
  6. 1367. 二叉树中的列表
  7. C语言中 编译预处理命令的作用有哪些,C语言系列——预处理命令
  8. 关于“语义通信”的名词解释
  9. MSRN(多尺度超分辨率重建)
  10. TM1650+DS3231+STC15LE计数数码管小时钟