提问者:小点点

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


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

我看到< code > audio manager . iswiredheadseton()已被弃用,但仍可使用,不过这仅表示已插入有线耳机。蓝牙有类似的选项吗?这是否涵盖了所有可能的音频选项?

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


共2个答案

匿名用户

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

匿名用户

您必须扩展“广播焦点更改侦听器”类。在它的音频焦点更改功能中,您将收到与音频相关的每个事件的通知。

使用< code>AudioManager监控外部扬声器的状态变化。ACTION_HEADSET_PLUG常量(它作为< code>onAudioFocusChange参数提供给您)。