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

时间:2017-09-10 03:40:10

标签: android audio bluetooth

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

我看到AudioManager.isWiredHeadsetOn()已被弃用但仍然可以使用,但这仅表明已插入有线耳机。是否有类似的蓝牙选项?这将涵盖所有可能的音频选项吗?

相反,如果有办法告诉声音将通过内置扬声器传送,那可能也会有效。

2 个答案:

答案 0 :(得分:0)

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

使用AudioManager.ACTION_HEADSET_PLUG常量监视外部发言者状态的变化(它作为onAudioFocusChange参数提供给您。)

答案 1 :(得分:0)

public static boolean isWiredHeadsetConnected() {    
        AudioManager mAudioMgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
        if(mAudioMgr.isWiredHeadsetOn()){

                 mAudioMgr.setWiredHeadsetOn(false);
                 mAudioMgr.setSpeakerphoneOn(true);
                 mAudioMgr.setMode(AudioManager.MODE_IN_COMMUNICATION);

                 Toast.makeText(getApplicationContext(), "SpeakerPhone On", Toast.LENGTH_LONG).show();
          }
}

目的是检测是否插入或拔出插头:ACTION_HEADSET_PLUG。所以,你必须添加它。

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" />