天天看点

Audio输出通道切换的事件的捕获与处理

Audio输出通道切换的事件的捕获与处理

因为耳机插拔、蓝牙耳机的断开,Audio输出通路会自动切换。此时正在播放Audio的程序要获得通知,知道这一事件的发生。Android中是通过广播ACTION_AUDIO_BECOMING_NOISY这个Intent通知的。

处理广播的较好的方式,是动态注册/注销自己所关心的广播。下面代码演示了,开始播放时注册广播的Receiver;停止播放时注销广播的Receiver。对Audio输出通道切换的处理是暂停当前的播放,不直接从新的通道里发出声来。

[java] 
     view plain
     copy
     
    
   
           
  1. private class NoisyAudioStreamReceiver extends BroadcastReceiver {  
  2.     @Override  
  3.     public void onReceive(Context context, Intent intent) {  
  4.         if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {  
  5.             // Pause the playback  
  6.         }  
  7.     }  
  8. }  
  9. private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);  
  10. private void startPlayback() {  
  11.     registerReceiver(myNoisyAudioStreamReceiver(), intentFilter);  
  12. }  
  13. private void stopPlayback() {  
  14.     unregisterReceiver(myNoisyAudioStreamReceiver);  
  15. }