三星J7(Android8.1.0)ADB sendevent组合键实现方法咨询
实现Android设备上组合键的KeyDown/KeyUp分步操作
问题根源
你之前用sendevent操作/dev/input/event6无效,是因为这个设备是触摸屏(sec_touchscreen),只处理触摸手势,根本不支持普通文本按键的KEY事件(比如KEY_A=30)。要实现组合键,必须找对能处理标准按键事件的输入设备,或者用更省心的input keyevent命令序列。
方法一:用input keyevent模拟组合键分步操作
input keyevent会自动匹配系统正确的输入设备,不需要手动指定,直接就能模拟按键的按下和松开。以Ctrl+A为例:
# 按住Ctrl键(KeyDown) adb shell input keyevent --down 113 # 按下A键再松开 adb shell input keyevent --down 29 adb shell input keyevent --up 29 # 松开Ctrl键(KeyUp) adb shell input keyevent --up 113
按键码对应:KEYCODE_CTRL_LEFT=113,KEYCODE_A=29,其他组合键的按键码可对应Android标准按键码。
方法二:用sendevent操作正确的输入设备
如果一定要用sendevent,先找对设备:
- 重新执行
adb shell getevent -p,寻找KEY (0001)下包含大量按键码的设备(比如左Ctrl、字母键等)。如果设备没有物理键盘,需依赖系统虚拟键盘对应的输入设备。 - 假设找到的设备是
/dev/input/eventX,模拟Ctrl+A的命令序列如下(按键码以设备实际输出为准,示例中左Ctrl=254,A=30):
# Ctrl键按下 adb shell sendevent /dev/input/eventX 1 254 1 adb shell sendevent /dev/input/eventX 0 0 0 # A键按下 adb shell sendevent /dev/input/eventX 1 30 1 adb shell sendevent /dev/input/eventX 0 0 0 # A键松开 adb shell sendevent /dev/input/eventX 1 30 0 adb shell sendevent /dev/input/eventX 0 0 0 # Ctrl键松开 adb shell sendevent /dev/input/eventX 1 254 0 adb shell sendevent /dev/input/eventX 0 0 0
注意:不同设备按键码可能存在差异,必须严格对应getevent -p的输出。如果找不到支持标准按键的设备,优先使用方法一。
测试提示
尽量在系统自带的文本输入框(比如短信、备忘录)中测试,避免第三方应用拦截组合键事件。
内容的提问来源于stack exchange,提问作者Văn Chiến Trương
相关产品推荐
相关产品推荐

