2017-09-10 30 views
1

只有在未通过手机内置扬声器播放的情况下,我才想在应用程序中播放声音。为此,我假设我需要确定是否连接了外部扬声器(有线扬声器,蓝牙耳机,有线耳机等)。Android - 如何确定是否连接了外部扬声器

我看到AudioManager.isWiredHeadsetOn()已弃用,但仍然有效,但这只能表明有线耳机已插入。是否有类似的蓝牙选项?是否涵盖所有可能的音频选项?相反,如果有一种方法可以告诉声音将通过内置扬声器发送,那么这可能也会起作用。

回答

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参数提供给您)。

+0

这不仅将展示重点的变化。我想在播放声音之前检查是否连接了外部扬声器。此外,ACTION_HEADSET_PLUG仅用于监控有线耳机,就我所知道的文档而言。 –

相关问题