[Android]通过adb shell input上报命令模拟屏幕点击事件

常用的 input上报命令:
input text 1234 实际向界面注入1234文字,有输入框,能明显看到效果
input keyevent 4 键盘事件,4 为返回
input tap 100 300 单击触屏事件 ,模拟点击x=100 y = 300 位置
input swipe 100 300 500 300 触屏滑动事件,模拟滑动,从x =100
y = 300 滑动到x=500 y=300位置
input press 模拟按下轨迹球
input roll 100 300 模拟轨迹球滑动 x 方向100 y方向300

获取坐标方法:
第一步:计算比例

adb shell getevent -p | grep -e “0035” -e “0036”
获得event 体系里 宽(0035)和高(0036)

以当前我使用的手机为例,命令会输出如下信息:
0035 : value 0, min 0, max 1602, fuzz 0, flat 0, resolution 0
0036 : value 0, min 0, max 2503, fuzz 0, flat 0, resolution 0

0035(宽) max 1602
0036(高) max 2503

计算比例(用已知的屏幕分辨率,如1080p即:1080(宽) * 1920(高)):
rateW = 1080(手机屏幕的宽) / 1602(event里0035的max) = 0.674
rateH = 1920(手机屏幕的高) / 2503(event里0036的max) = 0.767

第二步:点击屏幕计算点击位置的坐标
adb shell getevent | grep -e “0035” -e “0036”
点击屏幕上需要的位置,会有如下输出:
/dev/input/event0: 0003 0035 00000341
/dev/input/event0: 0003 0036 000008ec

 把0035和0036后面的位置数据从16进制转化为10进制
width = 0x341 = 3*16*16 + 4*16 + 1 = 833
height = 0x8ec = 8*16*16 + 14*16 + 12 = 2284
这是在event体系里的位置,将其转化为屏幕位置
screenW = width*rateW = 833*0.674 = 561
screenH = height*rateH = 2284*0.767 = 1751

终于算出来了
刚刚点击的屏幕位置坐标就是(561, 1751)

Android 系统中,PhoneWindowManager.java 是处理系统级别事件的一个重要类。如果底层按键通过 input 上报之后,该事件最终会被传递到 PhoneWindowManager.java 中处理。在 PhoneWindowManager.java 中,可以通过重写 onKeyDown 和 onKeyUp 方法来处理按键事件。在这两个方法中,你可以获取到按键的键值和按键状态,并进行相应的处理。 为了测试和验证按键事件,可以使用 Android 系统自带的 adb 工具,通过命令模拟按键事件。具体步骤如下: 1. 首先需要连接 Android 设备到电脑上,并启用 USB 调试模式。 2. 在电脑上打开命令行终端,进入 adb 工具所在的目录。 3. 使用 adb shell 命令进入 Android 设备的 shell 环境。 4. 使用 input 命令模拟按键事件。例如,模拟按下 F1 按键: ``` input keyevent KEYCODE_F1 ``` 5. 在 PhoneWindowManager.java 中的 onKeyDown 或 onKeyUp 方法中添加日志打印语句,以便查看是否能够正确地获取到按键事件的键值和按键状态。例如: ``` @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.d(TAG, "onKeyDown: keyCode = " + keyCode + ", event = " + event); return super.onKeyDown(keyCode, event); } ``` 6. 重启 Android 设备,确保修改代码生效。 7. 使用命令模拟按键事件,观察 PhoneWindowManager.java 中的日志输出,验证按键事件是否被正确地处理。 注意,以上步骤只是一个简单的测试过程,实际情况可能需要更加复杂的测试和验证。同时,在处理按键事件时,需要注意安全性和兼容性等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值