Merge pull request #3397 from ByteHamster/fix-crash-audio-focus-after-shutdown

Fixed receiving audio events after service shutdown
This commit is contained in:
H. Lehmann 2019-09-09 22:56:40 +02:00 committed by GitHub
commit 037c4d3922
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -350,13 +350,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
setPlayerStatus(PlayerStatus.PAUSED, media, getPosition()); setPlayerStatus(PlayerStatus.PAUSED, media, getPosition());
if (abandonFocus) { if (abandonFocus) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { abandonAudioFocus();
AudioFocusRequest.Builder builder = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setOnAudioFocusChangeListener(audioFocusChangeListener);
audioManager.abandonAudioFocusRequest(builder.build());
} else {
audioManager.abandonAudioFocus(audioFocusChangeListener);
}
pausedBecauseOfTransientAudiofocusLoss = false; pausedBecauseOfTransientAudiofocusLoss = false;
} }
if (stream && reinit) { if (stream && reinit) {
@ -370,6 +364,16 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
}); });
} }
private void abandonAudioFocus() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
AudioFocusRequest.Builder builder = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setOnAudioFocusChangeListener(audioFocusChangeListener);
audioManager.abandonAudioFocusRequest(builder.build());
} else {
audioManager.abandonAudioFocus(audioFocusChangeListener);
}
}
/** /**
* Prepares media player for playback if the service is in the INITALIZED * Prepares media player for playback if the service is in the INITALIZED
* state. * state.
@ -701,6 +705,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
*/ */
@Override @Override
public void shutdown() { public void shutdown() {
abandonAudioFocus();
executor.shutdown(); executor.shutdown();
if (mediaPlayer != null) { if (mediaPlayer != null) {
try { try {
@ -907,13 +912,7 @@ public class LocalPSMP extends PlaybackServiceMediaPlayer {
mediaPlayer.reset(); mediaPlayer.reset();
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { abandonAudioFocus();
AudioFocusRequest.Builder builder = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setOnAudioFocusChangeListener(audioFocusChangeListener);
audioManager.abandonAudioFocusRequest(builder.build());
} else {
audioManager.abandonAudioFocus(audioFocusChangeListener);
}
final Playable currentMedia = media; final Playable currentMedia = media;
Playable nextMedia = null; Playable nextMedia = null;