转载请注明出处:校酷网-大学生菁英创业平台

实现按键精灵的思路主要有三种:

1.AccessibilityService辅助类,这个类是设计用来帮助残障人士使用android 手机的,我们可以利用它实现按键精灵的部分功能,因为利用这个类只能找到页面的控件,然后对控件进行模拟点击,不能实现对屏幕的某个位置进行点击

2.Instrumentation方法,这种方法确实可以点击屏幕上任何位置,而且点击事件可以生效,但是退出程序就不能进行了,程序出现错误,提示没有INJECT_EVENTS权限,在如今第三方Rom横行的今天,几乎不可能获取到这个权限。

3.adb shell命令的方法,这种方法很通用,能在所有android设备上使用,缺点是需要手机需要root,程序需要获取到root权限,才能实现点击;

我们经常使用Android adb shell命令在电脑上查看与之相连的Android设备各种信息,今天我们选择用adb shell 命令来实现一种最为通用,兼容性最强的按键精灵;

windows端使用adb shell命令

1.win+R键打开cmd,输入adb shell,会连接到当前与电脑连接的手机(如果你没有配置adb 命令的环境变量,要cd 命令进入到 sdk 下的 platform—tools目录 再输入 adb shell命令)

image

2.gettevent /sendevent 获取输入设备事件信息

getevent用于获取当前系统input设备的一些参数和实时事件的数据

sendevent用于发送input事件,用来模拟物理按键的点击和屏幕任意位置的点击

这俩命令的作用就是相当于解放了手,可以通过命令直接调用Linux底层来控制手机,工具的源码位于Android SDK的system/core/toolbox下(sendevent.c getevent.c)

(1)输入getevent -p 获取当前Android 设备的信息

image可以看到输出的信息相当复杂,我们梳理一下可以看到当前设备有5个 devive 设备, 其中每个设备下KEY(0001)、ABS(0003)、SYN(0000)等表示该设备所支持的事件类型:EV_SYN [0000] (同步事件),EV_KEY [0001] (按键事件),EV_ABS [0003] (绝对值事件), ** 从name:可以看出 这些输入设备 有耳机孔,物理按键,gps ,屏幕输入等, 我们真正需要的是name :“synaptics—rmi—ts” 这个屏幕输入设备 如下图:

image我们观察上图中的abs 信息 其中的 0035 和 0036两项 max值 1080 *1926(注意:也许你的手机0035 0036 两项的max信息是一个很大的值,不要担心,你只要网上搜索一下你手机真实的分辨率信息,两者分别相除就可以得到一个倍数,要记好这个倍数) 就是手机屏幕的分辨率信息,这两项的信息相当重要,是我们接下来工作的基础;

3.观察点击屏幕后getevent输出的坐标信息;

接下来点击屏幕你会发现屏幕上滚动了十几行复杂的数据,如下图: image

无需担心过多,我们只要观察 ,第三列 0035 和 0036 分别对应的信息,这就是刚才你点击的屏幕所对应 16 进制的坐标信息 0x3a5 和0x568(还记得上面的那个倍数吗,如果上一步你得到的不是真实的分辨率信息,不要忘了,要除以那个倍数,才是真实的16进制坐标信息奥) ,这正是我们所需要的,这个坐标正好对应着我手机上的浏览器图标,也就是说,一会我们会实现模拟点击启动浏览器(你可以对应一个你想打开应用的图标);

4.利用input 向设备发送模拟按键事件

input keyevent 发送键盘事件

用法说明:

adb shell input keyevent “value”

usage: input ... input text

input keyevent input tap

input swipe

如上,input后可以跟很多参数, text相当于输入内容,keyevent相当于手机物理或是屏幕按键

tap相当于touch事件,swipe相当于滑动~~是不是很赞?

adb shell 输入 input key event 3 你会发现退回了桌面,这个事件相当于手机的home键,怎么样是不是很酷?

文章后面会附上详细的事件对应信息

好了,回到正题,刚才我们得到了点击事件的 16 进制坐标 0x3a5 和0x568,我们需要把他转化成10进制(input tab 需要的是 10进制坐标信息)为 933 和 1384

adb shell命令输入 input tap 933 1384 你会发现我们已经成功启动了浏览器,到这里我们已经可以再 windows 系统实现模拟点击事件, 可是如何才能在代码里用呢,别着急接着往下看:

在程序中引用adb shell命令

1.获取root权限,发送input 键盘点击事件:

需要先root你的手机

/**

执行shell命令

@param cmd

*/ private void execShellCmd(String cmd) {

try {

// 申请获取root权限,这一步很重要,不然会没有作用

Process process = Runtime.getRuntime().exec("su");

// 获取输出流

OutputStream outputStream = process.getOutputStream();

DataOutputStream dataOutputStream = new DataOutputStream(

outputStream);

dataOutputStream.writeBytes(cmd);

dataOutputStream.flush();

dataOutputStream.close();

outputStream.close();

} catch (Throwable t) {

t.printStackTrace();

}

}

在需要执行的地方:

execShellCmd("input tap 933 184");

你可以把具体的逻辑卸载一个服务里,可以轻松实现录制脚本,运行点击命令,至此,实现一个自己的按键精灵是不是很容易呢;

附表

附表:input keyevent所对应全部key值:

KEYCODE_MENU 1

KEYCODE_SOFT_RIGHT 2

KEYCODE_HOME 3

KEYCODE_BACK 4

KEYCODE_CALL 5

KEYCODE_ENDCALL 6

KEYCODE_0 7

KEYCODE_1 8

KEYCODE_2 9

KEYCODE_3 10

KEYCODE_4 11

KEYCODE_5 12

KEYCODE_6 13

KEYCODE_7 14

KEYCODE_8 15

KEYCODE_9 16

KEYCODE_STAR 17

KEYCODE_POUND 18

KEYCODE_DPAD_UP 19

KEYCODE_DPAD_DOWN 20

KEYCODE_DPAD_LEFT 21

KEYCODE_DPAD_RIGHT 22

KEYCODE_DPAD_CENTER 23

KEYCODE_VOLUME_UP 24

KEYCODE_VOLUME_DOWN 25

KEYCODE_POWER 26

KEYCODE_CAMERA 27

KEYCODE_CLEAR 28

KEYCODE_A 29

KEYCODE_B 30

KEYCODE_C 31

KEYCODE_D 32

KEYCODE_E 33

KEYCODE_F 34

KEYCODE_G 35

KEYCODE_H 36

KEYCODE_I 37

KEYCODE_J 38

KEYCODE_K 39

KEYCODE_L 40

KEYCODE_M 41

KEYCODE_N 42

KEYCODE_O 43

KEYCODE_P 44

KEYCODE_Q 45

KEYCODE_R 46

KEYCODE_S 47

KEYCODE_T 48

KEYCODE_U 49

KEYCODE_V 50

KEYCODE_W 51

KEYCODE_X 52

KEYCODE_Y 53

KEYCODE_Z 54

KEYCODE_COMMA 55

KEYCODE_PERIOD 56

KEYCODE_ALT_LEFT 57

KEYCODE_ALT_RIGHT 58

KEYCODE_SHIFT_LEFT 59

KEYCODE_SHIFT_RIGHT 60

KEYCODE_TAB 61

KEYCODE_SPACE 62

KEYCODE_SYM 63

KEYCODE_EXPLORER 64

KEYCODE_ENVELOPE 65

KEYCODE_ENTER 66

KEYCODE_DEL 67

KEYCODE_GRAVE 68

KEYCODE_MINUS 69

KEYCODE_EQUALS 70

KEYCODE_LEFT_BRACKET 71

KEYCODE_RIGHT_BRACKET 72

KEYCODE_BACKSLASH 73

KEYCODE_SEMICOLON 74

KEYCODE_APOSTROPHE 75

KEYCODE_SLASH 76

KEYCODE_AT 77

KEYCODE_NUM 78

KEYCODE_HEADSETHOOK 79

KEYCODE_FOCUS 80

KEYCODE_PLUS 81

KEYCODE_MENU 82

KEYCODE_NOTIFICATION 83

KEYCODE_SEARCH 84

TAG_LAST_KEYCODE 85

android 多个按键精灵,Android 一种通用的按键精灵的实现思路相关推荐

  1. 【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)--- 矩阵键盘

    请先阅读上篇: 短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动) 上面的程序适用于单个按键,那是不是也可以适用于矩阵键盘呢? 答案是肯定的. 接下来在这里做一个简单的扩展,具体框架不用改变, ...

  2. 【按键】短按,长按,按键释放,三种模式的按键扫描程序(软件消抖动)

    先来说一下这三种模式的意思: 1. 短按模式:单击按键时,返回一次有效按键值:长按时也只返回一次有效按键值.这样可以有效地排除因不小心长按带来的返回多次有效按键,进而执行多次按键处理程序. 2. 长按 ...

  3. Android 一种通用的按键精灵的实现思路

    转载请注明出处:校酷网-大学生菁英创业平台 实现按键精灵的思路主要有三种: 1.AccessibilityService辅助类,这个类是设计用来帮助残障人士使用android 手机的,我们可以利用它实 ...

  4. android模拟按键方法,Android随笔之——模拟按键操作的几种方式

    前几天转过一篇Android上模拟按键操作.触屏事件的博客,昨天又去找了百度.谷歌了一下,写了一点简单的测试代码,留待不时之需.有需要看之前转载的那篇博客的请看这里→_→转:Android随笔之--使 ...

  5. Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期

    按键响应的第一种方式: 在XML文件里面设置按键的onClick绑定函数.就像下面的代码,给Button设置onClick属性,在按键被按下的时候,会调用java文件里面的onClickbtton1这 ...

  6. 电容屏/电阻屏Android虚拟按键实现的两种方法

    (一) 虚拟按键的描述可以见 韩超和梁泉的 <Android系统级深入开发--移植与调试>的第八章: 虚拟按键(Virtual Key)是Eclair版本开始增加的新特性.Virtual  ...

  7. android自动隐藏虚拟键,Android 隐藏底部虚拟键的两种方法

    方法一  滑动屏幕 可重新显示出来 protected void hideBottomUIMenu() { //隐藏虚拟按键,并且全屏 if (Build.VERSION.SDK_INT > 1 ...

  8. Android 手机自动化测试工具有哪几种?

    Android 手机自动化测试工具有哪几种? 3 条评论 分享 按投票排序按时间排序 28 个回答 78赞同 反对,不会显示你的姓名 知乎用户,https://github.com/truebit 孙 ...

  9. android蓝牙耳机按键流程,蓝牙耳机按键在Android侧的处理流程

    目前大多数音频视频设备采用红外遥控器,由于距离.角度.障碍物等的影响,红外遥控器的应用受到了很大限制.蓝牙无线通信技术可以实现传统红外遥控全部应用功能,而且客服了红外遥控器的局限性.蓝牙音频视频遥控应 ...

  10. android蓝牙耳机下的语音(输入/识别)及按键监听

    第一次在csdn写博客,在此把自己折腾了两三天的一个问题的解决过程记录一下. 背景:本人负责公司android平台的app开发,最近要开发一个语音助手类的app,类似于灵犀语音助手.虫洞语音助手等.其 ...

最新文章

  1. sscanf简单用法
  2. IOS开发-GitHub使用详解
  3. 关于PyTorch中的register_forward_hook()函数未能执行其中hook函数的问题
  4. (转载)linux中shell变量
  5. 是不是人老了,子女都不愿和老人相处?
  6. SQLite快速入门
  7. Java_基础(一)
  8. 微信小程序 选择微信自带的地址 用户授权选择了拒绝
  9. zabbix修改和查看登录密码
  10. haproxy之安装与配置详解
  11. Python 语言参考手册
  12. EMOS邮件系统安装(光盘安装版)
  13. 微信公众号cookie+token获取
  14. 【树莓派Zero】1- 简介
  15. 这3种管理者是“企业毒瘤”,须根除
  16. 武汉凭什么被列为国家超大城市?
  17. 955 互联网公司白名单来了!这些公司月薪 20k,没有 996!福利榜国内大厂只有这家!...
  18. matlab中sqp的算法原理_最优化方法及其Matlab程序设计 马昌凤
  19. Unity秒表计时器
  20. 解决端口被占用问题(以80端口为例)

热门文章

  1. IDEA download sources 报Cannot reconnect错误解决方法
  2. macOS:隐私设置与数据库相关的问题
  3. 配色三部曲-你真懂颜色了吗?
  4. 第五次:对比分析《大唐仙妖劫》和《梦幻西游》
  5. Window和WindowManager--《Android开发艺术探索》阅读笔记——第八章
  6. 交换字符使得字符串相同
  7. 用python画猫和老鼠_一个Python游戏:猫和老鼠
  8. html单标签和双标签汇总
  9. 爱也可以量化?用4个公式表征爱情
  10. 机器学习特征工程之特征缩放+无量纲化:行归一化(范数化,Normalizer)