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

3
我希望在应用程序中播放声音,但仅当没有通过手机的内置扬声器播放时。为了做到这一点,我认为需要找出是否连接了外部扬声器(有线扬声器、蓝牙耳机、有线耳机等)。
我发现AudioManager.isWiredHeadsetOn()已被弃用,但仍可使用,但这只显示有线耳机已插入。是否有类似于蓝牙的选项?那样是否能涵盖所有可能的音频选项?
相反,如果有一种方法可以告诉声音将通过内置扬声器路由,那么也可能同样有效。
2个回答

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

0
你必须扩展OnAudioFocusChangeListener类。在它的onAudioFocusChange函数中,你将接收到与音频相关的每一个事件的通知。
外部扬声器状态的变化可以通过AudioManager.ACTION_HEADSET_PLUG常量进行监测(它会作为一个onAudioFocusChange参数提供给你)。

这只会显示焦点变化。在播放声音之前,我想检查外部扬声器是否已连接。此外,根据文档,ACTION_HEADSET_PLUG 仅用于监视有线耳机。 - Andrew Lasher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接