android - 如何通过 ADB 检查是否正在使用外部麦克风

标签 android android-intent adb android-broadcastreceiver

我正在尝试通过 ADB 检查是否使用了外部有线耳机麦克风。当我插入有线耳机时,会自动检测到此麦克风,但出于外部脚本编写的目的,检测此操作将非常有帮助。

我找不到麦克风的 Intent ,但在此处查找了耳机 Intent : http://developer.android.com/reference/android/content/Intent.html

我尝试了这个广播 Intent 来单独检测耳机:

adb shell am broadcast -a android.intent.action.HEADSET_PLUG

无论有线耳机是否实际插入,都会得到此响应:

Broadcasting: Intent { act=android.intent.action.HEADSET_PLUG }
Broadcast completed: result=0

所以我不知道从这里该去哪里。我什至无法检测耳机是否已插入,更不用说是否正在使用外部麦克风了。任何帮助将不胜感激。谢谢!

最佳答案

我发现此方法适用于我的设备:

运行命令

adb shell dumpsys Activity 广播 | grep 麦克风

它应该产生类似的东西:

extras: Bundle[{name=h2w, state=1, microphone=1}]
extras: Bundle[{name=h2w, state=0, microphone=1}]
extras: Bundle[{name=h2w, state=1, microphone=1}]
extras: Bundle[{name=h2w, state=0, microphone=1}]
extras: Bundle[{name=h2w, state=1, microphone=1}]
extras: Bundle[{name=h2w, state=0, microphone=1}]
extras: Bundle[{name=h2w, state=1, microphone=1}]
extras: Bundle[{name=h2w, state=0, microphone=1}]
extras: Bundle[{name=h2w, state=1, microphone=1}]
extras: Bundle[{name=h2w, state=0, microphone=1}]
extras: Bundle[{name=h2w, state=1, microphone=1}]
extras: Bundle[{name=h2w, state=0, microphone=1}]
extras: Bundle[{name=h2w, state=1, microphone=1}]
  Bundle[{name=h2w, state=1, microphone=1}]

最后一行位于转储的粘性广播部分内,广播在更改之前保持不变。

因此,如果我们使用 tail 获取最后一行并对其进行剖析,它会包含耳机的当前状态:

adb shell dumpsys Activity 广播 | grep 麦克风 |尾-n 1

输出:

bundle [{name=h2w,state=1,mic=1}]

state 整数指的是耳机插孔中是否插入了某些东西,无论它是否包含麦克风。 0 表示未插入,1 表示已插入。

麦克风整数指的是最后插入的耳机是否也包含麦克风。 0 表示否,1 表示是。

场景

如果当前插入一副普通耳机,输出将为:

bundle [{name=h2w,state=1,麦克风=0}]


如果当前插入了带麦克风的耳机,则输出将为:

bundle [{name=h2w,state=1,mic=1}]


如果未插入任何内容,则输出为:

bundle [{name=h2w,state=0,麦克风=0}]

bundle [{name=h2w,state=0,麦克风=1}]

关于android - 如何通过 ADB 检查是否正在使用外部麦克风,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36414380/

相关文章:

android - 获取类似于 Android Studio 内置 Android Monitor 的命令行 `adb logcat` 输出

android - 通过不在 android 游标中工作来排序

android - 我的 `adb logcat ...` 命令有什么问题?

android - NDKBuild 失败

java - 没有 onActivityResult 的 Activity 之间的 Android 通信

android - 在android中以编程方式启动电子邮件客户端并将电子邮件地址传递给客户端

android - 分享内容 : Permission Denial when using Intent. createChooser

android - adb 不被识别为内部或外部命令、可运行程序或批处理文件

android - 如何找出哪个Android APP正在使用content provider来监控系统数据?

Android:使用 ACTION_SEND Intent 发送 HTML 文本