Android-如何确定是否连接了外部扬声器

Android-如何确定是否连接了外部扬声器,android,audio,bluetooth,Android,Audio,Bluetooth,我只想在应用程序中播放未通过手机内置扬声器播放的声音。为此,我假设我需要确定是否连接了外部扬声器(有线扬声器、蓝牙耳机、有线耳机等) 我看到,AudioManager.isWiredHeadsetOn()已被弃用,但仍能正常工作,但这仅表明已插入有线耳机。蓝牙有类似的选项吗?这会涵盖所有可能的音频选项吗 相反,如果有一种方法可以判断声音将通过内置扬声器传送,那么这种方法可能也同样有效。您必须扩展OnAudioFocusChangeListener类。在它的onAudioFocusChange功能

我只想在应用程序中播放未通过手机内置扬声器播放的声音。为此,我假设我需要确定是否连接了外部扬声器(有线扬声器、蓝牙耳机、有线耳机等)

我看到,
AudioManager.isWiredHeadsetOn()
已被弃用,但仍能正常工作,但这仅表明已插入有线耳机。蓝牙有类似的选项吗?这会涵盖所有可能的音频选项吗


相反,如果有一种方法可以判断声音将通过内置扬声器传送,那么这种方法可能也同样有效。

您必须扩展
OnAudioFocusChangeListener
类。在它的
onAudioFocusChange
功能中,您将收到与音频相关的每一个事件的通知

外部扬声器状态的变化通过
AudioManager.ACTION\u HEADSET\u PLUG
常量(它作为
onAudioFocusChange
参数提供给您)进行监控

有一个目的是检测一个耳机是否被插上或拔下:
动作\u耳机\u插头
。因此,您必须添加它

public static boolean isBluetoothHeadsetConnected() {
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    return mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()
            && mBluetoothAdapter.getProfileConnectionState(BluetoothHeadset.HEADSET) == BluetoothHeadset.STATE_CONNECTED;
} 
蓝牙权限:

<uses-permission android:name="android.permission.BLUETOOTH" />

这只会显示焦点更改。我想在播放声音之前检查外部扬声器是否已连接。另外,
ACTION\u header\u PLUG
仅用于监控有线耳机,我在文档中可以看出。
<uses-permission android:name="android.permission.BLUETOOTH" />