通过adb命令监控输入事件

本文介绍了一种使用ADB工具监控Android设备触摸屏事件的方法。主要包括查找触摸或键盘对应的事件设备号,以及如何利用cat命令监听这些事件。适用于排查触摸屏响应问题。

有时运行中出现触摸屏点击不好用,此时adb好用的话,通过命令来监控看触摸屏是否有事件上报。如果有就是前台应用处理的问题,可能是有透明的activity尚未销毁;

 

adb监控touch等event的方法分为简单两步:

1. 找到touch或键盘对应的event设备号;

2. 使用cat监听该event设备;

 

1. 找到的event号的方法:

dos窗口输入:

adb shell dumpsys input >  input.txt

然后在input.txt里搜索关键字 dev,得到如下截图:

2. dos窗口继续输入

 adb shell cat /dev/input/event2   

之后点击屏幕,如果有回显如下图的字符,则有事件,应该是上层应用处理的问题;

<think>我们需要模拟HDMI断开连接,但实际上HDMI状态是由系统底层控制的。不同的Android设备制造商可能有不同的实现方式,因此没有统一的标准ADB命令。 但是,我们可以尝试以下两种通用方法: 方法1:使用`dumpsys`命令模拟显示设备断开 有些设备支持通过`dumpsys`命令来模拟显示设备的连接状态变化。 方法2:使用输入键值模拟(针对电视设备) 部分电视设备允许通过发送特定的按键事件来切换HDMI输入源,从而间接模拟HDMI断开的效果。 下面给出具体实现: ### 方法1:通过dumpsys命令(需要root权限) 1. 首先获取当前连接的显示设备列表: ```bash adb shell dumpsys display | grep mDisplayId ``` 通常主显示屏的ID为0,而HDMI可能为1或2。 2. 断开指定显示设备(假设HDMI的displayId为1): ```bash adb shell dumpsys display disconnect 1 ``` 3. 重新连接: ```bash adb shell dumpsys display connect 1 ``` 注意:此方法需要系统权限,普通设备可能无法使用。 ### 方法2:模拟按键切换HDMI输入源(无需root) 1. 发送切换输入源的广播(针对Android TV): ```bash adb shell am broadcast -a com.sony.dtv.hdmi.action.CEC_ONE_TOUCH_PLAY ``` 不同品牌的电视可能有不同的广播action,下面列举一些常见品牌: - 索尼(Sony): `com.sony.dtv.hdmi.action.CEC_ONE_TOUCH_PLAY` - 三星(Samsung): `com.samsung.intent.action.HDMI_HOTPLUG` - 通用方法:发送按键事件模拟按了“输入源”键 2. 发送按键事件(推荐): ```bash adb shell input keyevent KEYCODE_TV_INPUT ``` 这会打开输入源选择界面,然后我们可以再发送方向键和确认键来切换。 3. 切换到其他输入源(例如切换到AV1): ```bash # 打开输入源选择 adb shell input keyevent KEYCODE_TV_INPUT # 等待1秒 sleep 1 # 向下选择(根据实际情况可能需要多次) adb shell input keyevent KEYCODE_DPAD_DOWN # 确认选择 adb shell input keyevent KEYCODE_ENTER ``` 4. 切换回HDMI: 同样通过按键切换回来。 ### 方法3:通过设置模拟显示设备(Android模拟器) 如果是Android模拟器,可以使用以下命令: ```bash adb emu display set-disconnect 1 # 断开HDMI adb emu display set-connect 1 # 重新连接 ``` ### 方法4:物理断开模拟(需要硬件支持) 如果设备支持HDMI-CEC,可以使用支持HDMI控制的智能插座,通过ADB控制插座断电来模拟物理断开。 但由于这需要额外硬件,这里不展开。 ### 通用检测方法 为了验证HDMI断开是否生效,我们可以监控logcat: ```bash adb logcat | grep -E "Display|HDMI|hotplug" ``` ### 注意事项 1. **权限问题**:非root设备可能无法直接改变显示设备状态。 2. **设备差异**:不同厂商的设备可能需要不同的命令。 3. **Android TV**:电视设备通常有多个HDMI接口,断开特定接口可能需要更具体的命令。 如果以上命令无效,建议查阅设备制造商的开发文档或系统源码。 §§相关问题§§: 1. 如何通过ADB命令模拟USB设备断开连接? 2. 在Android开发中如何检测HDMI连接状态变化? 3. 如何在没有root权限的情况下模拟硬件事件? 4. 不同品牌Android电视的HDMI控制命令有哪些差异? </think>要模拟 HDMI 断开连接进行测试,可以使用以下 ADB 命令方法。这些方法涵盖了通用方案和特定设备厂商的方案: ### 通用方法:使用 `dumpsys` 命令 ```bash # 1. 获取当前显示设备列表 adb shell dumpsys display | grep "mDisplayId=" # 2. 断开指定显示设备(通常HDMI的displayId为1) adb shell dumpsys display disconnect 1 # 3. 重新连接显示设备 adb shell dumpsys display connect 1 ``` **解释**: 1. `dumpsys display` 查询当前显示设备信息 2. `disconnect` 命令模拟断开连接 3. `connect` 命令模拟重新连接 4. 适用于大多数 Android 设备(需要 root 权限) ### 厂商特定方法 #### 1. 三星设备 (Samsung) ```bash # 断开HDMI adb shell "echo 0 > /sys/devices/platform/hdmi/connection" # 重新连接 adb shell "echo 1 > /sys/devices/platform/hdmi/connection" ``` #### 2. 小米电视 (Xiaomi TV) ```bash # 断开HDMI adb shell am broadcast -a com.xiaomi.tv.action.HDMI_DISCONNECT # 重新连接 adb shell am broadcast -a com.xiaomi.tv.action.HDMI_CONNECT ``` #### 3. 海思芯片设备 (Hisilicon) ```bash # 断开HDMI adb shell "echo 0 > /sys/devices/platform/hi_hdmi/hdmi_state" # 重新连接 adb shell "echo 1 > /sys/devices/platform/hi_hdmi/hdmi_state" ``` ### 使用 Android 隐藏 API (需要系统权限) ```java // Java代码通过ADB shell调用隐藏API adb shell service call display 18 i32 1 # 断开HDMI adb shell service call display 19 i32 1 # 重新连接 ``` **参数说明**: - `display`: 调用的服务名 - `18`: HDMI断开操作的命令代码 - `19`: HDMI连接操作的命令代码 - `i32 1`: 显示设备ID(通常1是HDMI) ### 监控 HDMI 状态变化 测试时配合监控 HDMI 状态变化: ```bash # 实时监控HDMI状态日志 adb logcat | grep -E "HDMI|Display|hotplug" # 监控系统广播 adb logcat | grep "Intent.ACTION_HDMI_AUDIO_PLUG" ``` ### 自动化测试脚本 ```bash #!/bin/bash # hdmi_simulator.sh # 断开HDMI echo "Disconnecting HDMI..." adb shell dumpsys display disconnect 1 # 等待5秒 sleep 5 # 重新连接HDMI echo "Reconnecting HDMI..." adb shell dumpsys display connect 1 # 监控日志 echo "Monitoring logs..." adb logcat -c adb logcat -s "HDMIStateObserver" ``` ### 注意事项 1. **权限要求**: - 大多数命令需要 `root` 权限 - 部分命令需要 `WRITE_SECURE_SETTINGS` 权限 - 厂商特定路径可能需要设备已解锁 2. **设备兼容性**: ```bash # 检查设备支持的display服务 adb shell service list | grep display ``` 3. **Android版本差异**: - Android 10+:使用 `dumpsys display` 命令 - Android 9 及以下:可能需要使用物理开关模拟 4. **模拟器测试**: ```bash # Android模拟器特殊命令 adb emu display set-disconnect 1 adb emu display set-connect 1 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值