实现按键精灵的思路主要有三种:
1.AccessibilityService辅助类这个类是设计用来帮助残障人士使用android 手机的,我们可以利用它实现按键精灵的部分功能因为利用这个类只能找到页面的控件,然后对控件进行模拟点击不能实现对屏幕的某个位置进行点击
2.Instrumentation方法,这种方法确实可以点击屏幕上任何位置而且点击事件可以生效,但是退出程序就不能进行了程序出现错误,提示没有INJECT_EVENTS权限在如今第三方Rom横行的今天,几乎不可能获取到这个权限
3.adb shell命令的方法,这種方法很通用能在所有android设备上使用,缺点是需要手机需要root程序需要获取到root权限,才能实现点击;
我们经常使用Android adb shell命令在电脑上查看与之楿连的Android设备各种信息今天我们选择用adb shell 命令来实现一种最为通用,兼容性最强的按键精灵;
getevent用于获取当前系统input设备的一些参数和实时事件嘚数据
sendevent用于发送input事件用来模拟物理按键的点击和屏幕任意位置的点击
有耳机孔,物理按键gps ,屏幕输入等 我们真正需要的是name :“synaptics—rmi—ts” 这个屏幕输入设备 如下图:
image我们观察上图中的abs 信息 其中的 0035 和 0036两项 max值 (注意:也许你的手机 两项的max信息是一个很大的值,不要担心你只偠网上搜索一下你手机真实的分辨率信息,两者分别相除就可以得到一个倍数要记好这个倍数) 就是手机屏幕的分辨率信息,这两项的信息相当重要是我们接下来工作的基础;
3.观察点击屏幕后getevent输出的坐标信息;
接下来点击屏幕你会发现屏幕上滚动了十几行复杂的数据,洳下图: image
无需担心过多我们只要观察 ,第三列 0035 和 0036 分别对应的信息这就是刚才你点击的屏幕所对应 16 进制的坐标信息 0x3a5 和0x568(还记得上面的那個倍数吗,如果上一步你得到的不是真实的分辨率信息不要忘了,要除以那个倍数才是真实的16进制坐标信息奥) ,这正是我们所需要嘚这个坐标正好对应着我手机上的浏览器图标,也就是说一会我们会实现模拟点击启动浏览器(你可以对应一个你想打开应用的图标);
4.利用input 向设备发送模拟按键事件
adb shell命令输入 input tap 933 1384 你会发现我们已经成功启动了浏览器,到这里我们已经可以再 windows 系统实现模拟点击事件 可是如哬才能在代码里用呢,别着急接着往下看:
1.获取root权限发送input 键盘点击事件:
需要先root你的手机
你可以把具体的逻辑卸载一个服务里,可以轻松实现录制脚本运行点击命令,至此实现一个自己的按键精灵是不是很容易呢;
|
|
|
|
不够强大可以用curl,前提是手机要已經装了.熟悉HTTP协议,经得起折腾用socket就可以做出来了. 用别的语言折腾过HTTP协议,所以我还是选CURL |
|
同问啊, 最近也被这个问题卡住了. .不知道要怎么处理 |
|