Detener mi audio cuando otro audio ha comenzado a reproducirse en el dispositivo

Estoy reproduciendo un audio usando la clase MediaPlayer. Tengo un requisito en el que el audio reproducido por mi aplicación debe detenerse automáticamente cuando algunas otras canciones comenzaron a reproducir en el dispositivo por parte del usuario. ¿Cómo recibir notificaciones de que algún otro audio ha comenzado a reproducirse en el dispositivo en mi aplicación? Por favor avise.

ACTUALIZADO:

He probado este código, funciona por primera vez. Es decir, cuando lanzo mi aplicación y reproduzco un audio en mi aplicación, mi aplicación está reproduciendo un audio. Entonces, cuando abro un reproductor de música y toco otro audio, My app detecta la notificación en "AUDIOFOCUS_LOSS". Estoy deteniendo mi audio aquí. Entonces, cuando vuelva a reproducir audio en mi aplicación, y luego volver al reproductor de música y reproducir algún otro audio allí, esta vez mi aplicación no se detecta para esta notificación, por lo que no podía hacer de nuevo mi audio. Este es mi problema ahora.

¿Podría alguien ayudarme a resolver esto por favor?

public class MyActivity extends ActionBarActivity implements OnCompletionListener, OnPreparedListener, OnErrorListener, OnBufferingUpdateListener, AudioManager.OnAudioFocusChangeListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hclsquad_fm); audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); } @Override public void onAudioFocusChange(int focusChange) { switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: Toast.makeText(MyActivity.this, "Focus GAINED", Toast.LENGTH_LONG).show(); break; case AudioManager.AUDIOFOCUS_LOSS: case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: Toast.makeText(MyActivity.this, "Focus LOSS", Toast.LENGTH_LONG).show(); if(mediaPlayer != null) killMediaPlayer(); break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: Toast.makeText(MyActivity.this, "Focus LOSS TRANSIENT", Toast.LENGTH_LONG).show(); break; default: } } 

Pruebe este código a continuación. Encontré esta respuesta aquí

 OnAudioFocusChangeListener listener = new OnAudioFocusChangeListener() { public void onAudioFocusChange(int focusChange) { if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK){ // Lower the volume } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { // Raise it back to normal } } }; AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE); int request = am.requestAudioFocus(listener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); 

Las aplicaciones responsables siempre obtendrán el foco de audio antes de reproducir audio. No creo que sea posible que detecte cuando otra aplicación reproduce audio si no solicita el enfoque de audio.

En lugar de solicitar el enfoque de audio en su onCreate, hágalo antes de comenzar a reproducir audio:

 private void play(){ requestAudioFocus(); } 

Estás perdiendo el enfoque de audio. Deberías llamar

 requestAudioFocus(); 

Para recuperar el control.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.