Android 如何检查耳机或内部麦克风是否用于麦克风输入?

Android 如何检查耳机或内部麦克风是否用于麦克风输入?,android,Android,我正在为一个需要连接耳机麦克风的专业用途制作一个应用程序。我不希望用户错误地使用手机内置的麦克风,体验也不符合标准,因此理想情况下,应用程序应该使用3.5毫米的耳机 不幸的是,我在网上找不到任何关于这方面的信息,只有关于检查麦克风是否可用的帖子。我想检查是否有耳机插入3.5毫米插孔 我可以看到至少有一个应用程序具有此功能。当我连接/断开耳机时,将显示我的输入是来自耳机还是来自内部麦克风 如何在我自己的应用程序中实现这一点?您可以使用广播操作来检测有线耳机何时被插入 请注意,广播接收器必须手动注册

我正在为一个需要连接耳机麦克风的专业用途制作一个应用程序。我不希望用户错误地使用手机内置的麦克风,体验也不符合标准,因此理想情况下,应用程序应该使用3.5毫米的耳机

不幸的是,我在网上找不到任何关于这方面的信息,只有关于检查麦克风是否可用的帖子。我想检查是否有耳机插入3.5毫米插孔

我可以看到至少有一个应用程序具有此功能。当我连接/断开耳机时,将显示我的输入是来自耳机还是来自内部麦克风

如何在我自己的应用程序中实现这一点?

您可以使用广播操作来检测有线耳机何时被插入

请注意,广播接收器必须手动注册,而不是在清单中:

 yourBroadcastHandler = new BroadcastHandler();
 registerReceiver(yourBroadcastHandler, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
并为广播实现一个处理程序:

public final class BroadcastHandler extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        // Do what you need
    }
}

谢谢,这看起来解决了部分问题。另一个问题是,如果应用程序是在耳机已插入的情况下启动的,该怎么办?在这种情况下,我假设广播不会被触发。这似乎是可能的,当我使用耳机或内置麦克风作为麦克风输入时,应用Lesser AudioSwitch()会检测到。这正是我所需要的:)你应该在每次注册时接收广播,因为系统正在以粘性的方式广播操作\u耳机\u插头意图,这意味着它将被发送到任何正在注册的新广播接收器。哦,有趣的是,我将对此进行讨论。谢谢你的建议这很有效。非常感谢。对于其他看这个线程的人来说,这个答案来自这个线程(它有一个BroadcastHandler的实现):你知道这是否也适用于没有耳机插孔的手机的USB-C到耳机插孔转换器吗?