只有在未通過手機內置揚聲器播放的情況下,我纔想在應用程序中播放聲音。爲此,我假設我需要確定是否連接了外部揚聲器(有線揚聲器,藍牙耳機,有線耳機等)。Android - 如何確定是否連接了外部揚聲器
我看到AudioManager.isWiredHeadsetOn()
已棄用,但仍然有效,但這隻能表明有線耳機已插入。是否有類似的藍牙選項?是否涵蓋所有可能的音頻選項?相反,如果有一種方法可以告訴聲音將通過內置揚聲器發送,那麼這可能也會起作用。
只有在未通過手機內置揚聲器播放的情況下,我纔想在應用程序中播放聲音。爲此,我假設我需要確定是否連接了外部揚聲器(有線揚聲器,藍牙耳機,有線耳機等)。Android - 如何確定是否連接了外部揚聲器
我看到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
。所以,你必須添加它。
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
功能中,您會收到有關音頻的每一個事件的通知。
通過AudioManager.ACTION_HEADSET_PLUG
常數監視外部揚聲器狀態的變化(它作爲onAudioFocusChange
參數提供給您)。
這不僅將展示重點的變化。我想在播放聲音之前檢查是否連接了外部揚聲器。此外,ACTION_HEADSET_PLUG僅用於監控有線耳機,就我所知道的文檔而言。 –