Android getevent与sendevent:树莓派控制安卓电视盒技术问询
树莓派通过ADB使用sendevent控制安卓电视盒指南
1. 获取sendevent可用命令的方法
在未root的安卓电视盒上,确实没法直接访问/dev/input/eventxx文件读取按键映射,只能通过录制getevent输出来获取对应按键的sendevent命令,具体操作:
- 先在树莓派上连接电视盒:
adb connect [电视盒IP地址] - 启动事件录制:
adb shell getevent - 此时操作电视盒的物理按键(比如方向键、确认键),终端会实时输出该按键对应的事件数据,示例输出:
/dev/input/event1: 0001 0066 00000001 /dev/input/event1: 0000 0000 00000000 /dev/input/event1: 0001 0066 00000000 /dev/input/event1: 0000 0000 00000000 - 按
Ctrl+C停止录制,把这些输出内容保存下来,就是你需要的按键事件模板
输出字段说明:
/dev/input/event1:事件对应的输入设备路径0001:事件类型(这里是按键事件)0066:具体按键的编码00000001/00000000:按键状态(1=按下,0=松开)- 最后一行的
0000 0000 00000000是同步事件,必须保留,用来通知系统事件完成
2. 发送sendevent的格式与延时处理
命令格式
sendevent的标准格式如下,参数之间用空格分隔:
adb shell sendevent <设备路径> <类型码> <按键码> <状态码>
注意所有十六进制的码可以直接用数字(比如0001写成1也能生效,不过保留原格式更不容易出错)
延时的作用与添加位置
安卓系统需要识别“按下-松开”的完整按键动作,所以在按下事件和松开事件之间必须加延时,一般0.1秒(100ms)就足够让系统识别,用adb shell sleep 0.1实现。
完整示例
以录制到的“方向上”按键为例,对应的sendevent命令序列:
# 发送按键按下事件 adb shell sendevent /dev/input/event1 0001 0066 1 # 延时100ms,模拟真实按键按下时长 adb shell sleep 0.1 # 发送按键松开事件 adb shell sendevent /dev/input/event1 0001 0066 0 # 延时后发送同步事件 adb shell sleep 0.1 adb shell sendevent /dev/input/event1 0000 0000 0
你可以把常用的按键事件写成shell脚本,比如tv_control.sh,方便快速调用:
#!/bin/bash # 定义方向上按键的事件函数 press_up() { adb shell sendevent /dev/input/event1 0001 0066 1 adb shell sleep 0.1 adb shell sendevent /dev/input/event1 0001 0066 0 adb shell sleep 0.1 adb shell sendevent /dev/input/event1 0000 0000 0 } # 调用函数执行按键操作 press_up
给脚本添加执行权限:chmod +x tv_control.sh,运行./tv_control.sh即可触发方向上按键。
内容的提问来源于stack exchange,提问作者kapios
相关产品推荐
相关产品推荐

