2017-09-10 32 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僅用於監控有線耳機,就我所知道的文檔而言。 –

相關問題