本文譯自:http://developer.android.com/training/managing-audio/audio-output.html
使用者在使用Android裝置來播放音頻時,可以有很多選擇。大多數裝置都有內建的擴音器、有線耳機、以及很多支援藍芽串連和A2DP音訊裝置。
檢查使用的音頻播放硬體
你的應用程式行為會受到輸出音訊硬體的影響。
你可以使用以下代碼來查詢AudioManager對象,判斷當前輸出音訊硬體是裝置的擴音器、有線耳機、還是跟裝置串連的藍牙裝置。
if(isBluetoothA2dpOn()){
// Adjust output forBluetooth.
} else if (isSpeakerphoneOn()) {
// Adjust output forSpeakerphone.
} else if (isWiredHeadsetOn()) {
// Adjust output forheadsets
} else {
// If audio plays andnoone can hear it, is it still playing?
}
在音訊輸出硬體中處理變化
當耳機被拔掉或藍牙裝置連結斷開時,音頻流會被自動的路由到內建的擴音器。如果你在用高音量來聽音樂時發生了這件事,聲音會變得的嘈雜而讓人吃驚。
幸運的是,系統會在發生這件事時發出一個ACTIION_AUDIO_BECOMING_NOISY類型的Intent對象。在播放音頻時,註冊一個監聽這個Intent對象的BroadcastReceiver對象是一個良好的實踐。在播放音樂時,通常使用者期望暫停播放,而在遊戲時則希望降低音量。
privateclassNoisyAudioStreamReceiverextendsBroadcastReceiver{
@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);
}