首页 文章

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

提问于
浏览
2

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

我看到 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 参数提供给您) .

相关问题