我想在应用程序中播放声音,只要它不是通过手机的内置扬声器播放的 . 为此,我假设我需要查看是否连接了外部扬声器(有线扬声器,蓝牙耳机,有线耳机等) .
我看到 AudioManager.isWiredHeadsetOn() 已被弃用但仍然可以使用,但这仅表明插入了有线耳机 . 是否有类似的蓝牙选项?这将涵盖所有可能的音频选项吗?
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 . 所以,你必须添加它 .
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 功能中,您将收到与音频相关的每个事件的通知 .
OnAudioFocusChangeListener
onAudioFocusChange
使用 AudioManager.ACTION_HEADSET_PLUG 常量监视外部扬声器状态的变化(它作为 onAudioFocusChange 参数提供给您) .
AudioManager.ACTION_HEADSET_PLUG
2 回答
有意识检测是否插入或拔出插头:
ACTION_HEADSET_PLUG
. 所以,你必须添加它 .蓝牙许可:
您必须扩展
OnAudioFocusChangeListener
类 . 在它的onAudioFocusChange
功能中,您将收到与音频相关的每个事件的通知 .使用
AudioManager.ACTION_HEADSET_PLUG
常量监视外部扬声器状态的变化(它作为onAudioFocusChange
参数提供给您) .