Justin Vartanian
Justin Vartanian

Reputation: 1149

Stop a Mediaplayer that was started from another application

How do applications like Soundcloud stop another app's MediaPlayer? For example, when I am playing a song through Google Music and I open SoundCloud, the song from Google Music stops playing as soon as the Soundcloud song starts. I might be missing something obvious but I have always wondered how this is achieved.

Thanks, Justin

Upvotes: 2

Views: 823

Answers (2)

Ankit Aggarwal
Ankit Aggarwal

Reputation: 2405

Adding on to @TCA's answer:

There is only one AudioManager. So, Audio focus is assigned to each application that requests it one by one. This means that if another application requests audio focus, your application will lose it. You will be notified of the loss of audio focus through the onAudioFocusChange handler of the Audio Focus Change Listener (afChangeListener in TCA's answer) you registered when requesting the audio focus.

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

                       case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) :
                       //Transient audio loss
                       break;

                       case (AudioManager.AUDIOFOCUS_LOSS) :
                       //Audio focus loss. Stop playback.
                       break;

                       case (AudioManager.AUDIOFOCUS_GAIN) :
                       //Audio focus gain. Start playback.
                       break;
                       default: break;
}
}
};

Upvotes: 1

Arun C
Arun C

Reputation: 9035

Use Audio Focus. See Request the Audio Focus

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

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

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
    am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
    // Start playback.
}

Upvotes: 5

Related Questions