2013-03-13 8 views
14

Nella mia app sto provando a creare un pulsante che, quando viene premuto, interrompe tutte le altre app che riproducono musica. Quello che voglio è simile a quello che sto suonando attraverso un lettore musicale e se provo a suonare qualche altra musica attraverso un secondo lettore musicale, il lettore musicale corrente si ferma e poi inizia il secondo. Come possiamo impedire ad altre app di riprodurre musica dall'attività/app corrente?Come interrompere altre app che riproducono musica dalla mia attività corrente?

risposta

33
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); 

// Request audio focus for playback 
int result = am.requestAudioFocus(focusChangeListener, 
// Use the music stream. 
AudioManager.STREAM_MUSIC, 
// Request permanent focus. 
AudioManager.AUDIOFOCUS_GAIN); 


if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
// other app had stopped playing song now , so u can do u stuff now . 
} 

attenzione audio è assegnato a turno ogni applicazione che richieda. Ciò significa che se un'altra applicazione richiede il focus audio, l'applicazione la perderà. Sarete ed notifi della perdita di attenzione audio attraverso il gestore onAudioFocusChange del Audio fuoco Change Listener si registrato al momento della richiesta la messa a fuoco audio

 private OnAudioFocusChangeListener focusChangeListener = 
      new OnAudioFocusChangeListener() { 
        public void onAudioFocusChange(int focusChange) { 
          AudioManager am =(AudioManager)getSystemService(Context.AUDIO_SERVICE); 
        switch (focusChange) { 

          case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) : 
          // Lower the volume while ducking. 
          mediaPlayer.setVolume(0.2f, 0.2f); 
          break; 
          case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) : 
          pause(); 
          break; 

          case (AudioManager.AUDIOFOCUS_LOSS) : 
          stop(); 
          ComponentName component =new ComponentName(AudioPlayerActivity.this,MediaControlReceiver.class); 
          am.unregisterMediaButtonEventReceiver(component); 
          break; 

          case (AudioManager.AUDIOFOCUS_GAIN) : 
          // Return the volume to normal and resume if paused. 
          mediaPlayer.setVolume(1f, 1f); 
          mediaPlayer.start(); 
          break; 
          default: break; 
} 
} 
}; 
+1

risposta Molto bella e dettagliata. –

+0

qual è la classe MediaControlReceiver.class qui? –

Problemi correlati