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



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

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

相反,如果有一种方法可以说出声音将通过内置的扬声器进行路由,那可能也可以。

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

您必须扩展OnAudioFocusChangeListener类。在它的onAudioFocusChange函数中,将通知您与音频有关的每个事件。

AudioManager.ACTION_HEADSET_PLUG常数监视外部扬声器状态的变化(作为onAudioFocusChange参数提供给您)。

最新更新