Android音樂編程的管理音頻硬件
獲取當(dāng)前正在播放音頻的硬件信息
使用不同的硬件設(shè)備可能會影響您應(yīng)用程序的設(shè)計(jì)方式,您可以通過 AudioManager 來查詢當(dāng)前正在播放音頻的硬件設(shè)備信息,是內(nèi)置揚(yáng)聲器,還是有線耳機(jī),或者是藍(lán)牙設(shè)備。
示例代碼如下:
- if (isBluetoothA2dpOn()) {
- // Adjust output for Bluetooth. 藍(lán)牙設(shè)備
- } else if (isSpeakerphoneOn()) {
- // Adjust output for Speakerphone. 內(nèi)置揚(yáng)聲器(免提)
- } else if (isWiredHeadsetOn()) {
- // Adjust output for headsets 有線耳機(jī)
- } else {
- // If audio plays and noone can hear it, is it still playing? 未知設(shè)備
- }
處理音頻播放硬件的狀態(tài)變化
當(dāng)耳機(jī)線脫落,藍(lán)牙設(shè)備斷開,音頻輸出流會自動切換到內(nèi)置揚(yáng)聲器。如果此時(shí)您正在大聲播放音樂,這可能不是您期待的結(jié)果。
不過也不用擔(dān)心,當(dāng)出現(xiàn)硬件設(shè)備切換的時(shí)候,Android 會發(fā)送系統(tǒng)廣播 ACTION_AUDIO_BECOMING_NOISY ,您的應(yīng)用程序中應(yīng)該注冊一個(gè) BroadcastReceiver 來監(jiān)聽這個(gè)消息,當(dāng)出現(xiàn)這種情況的時(shí)候,如果正在聽音樂,較好的設(shè)計(jì)方案是暫停當(dāng)前音樂的播放,如果正在玩游戲,那么盡量降低游戲的音量是個(gè)不錯(cuò)的解決方法。
示例代碼如下:
- 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