Android音樂編程的管理音頻硬件
獲取當前正在播放音頻的硬件信息
使用不同的硬件設備可能會影響您應用程序的設計方式,您可以通過 AudioManager 來查詢當前正在播放音頻的硬件設備信息,是內置揚聲器,還是有線耳機,或者是藍牙設備。
示例代碼如下:
- if (isBluetoothA2dpOn()) {
- // Adjust output for Bluetooth. 藍牙設備
- } else if (isSpeakerphoneOn()) {
- // Adjust output for Speakerphone. 內置揚聲器(免提)
- } else if (isWiredHeadsetOn()) {
- // Adjust output for headsets 有線耳機
- } else {
- // If audio plays and noone can hear it, is it still playing? 未知設備
- }
處理音頻播放硬件的狀態變化
當耳機線脫落,藍牙設備斷開,音頻輸出流會自動切換到內置揚聲器。如果此時您正在大聲播放音樂,這可能不是您期待的結果。
不過也不用擔心,當出現硬件設備切換的時候,Android 會發送系統廣播 ACTION_AUDIO_BECOMING_NOISY ,您的應用程序中應該注冊一個 BroadcastReceiver 來監聽這個消息,當出現這種情況的時候,如果正在聽音樂,較好的設計方案是暫停當前音樂的播放,如果正在玩游戲,那么盡量降低游戲的音量是個不錯的解決方法。
示例代碼如下:
- private class NoisyAudioStreamReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {
- // Pause the playback
- }
- }
- }
- private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
- private void startPlayback() {
- registerReceiver(myNoisyAudioStreamReceiver(), intentFilter);
- }
- private void stopPlayback() {
- unregisterReceiver(myNoisyAudioStreamReceiver);
- }
參考文摘:
http://developer.android.com/training/managing-audio/audio-output.html