From c48c051ce29d50411bbc0aaeeae4973354688574 Mon Sep 17 00:00:00 2001 From: ibaker Date: Tue, 13 Aug 2024 07:50:02 -0700 Subject: [PATCH] Handle `HEADSETHOOK` as 'play' in `MediaButtonReceiver.onReceive` Issue: androidx/media#1581 #cherrypick PiperOrigin-RevId: 662515428 --- RELEASENOTES.md | 4 ++++ .../java/androidx/media3/session/MediaButtonReceiver.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index de39e2ac1c..6e21b74398 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -100,6 +100,10 @@ action, as [documented](https://developer.android.com/reference/androidx/media3/session/MediaSession#media-key-events-mapping) ([#1493](https://github.com/androidx/media/issues/1493)). + * Handle `KEYCODE_HEADSETHOOK` as a 'play' command in + `MediaButtonReceiver` when deciding whether to ignore it to avoid a + `ForegroundServiceDidNotStartInTimeException` + ([#1581](https://github.com/google/ExoPlayer/issues/1581)). * UI: * Downloads: * OkHttp Extension: diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaButtonReceiver.java b/libraries/session/src/main/java/androidx/media3/session/MediaButtonReceiver.java index 1141a175f8..6d807a820a 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaButtonReceiver.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaButtonReceiver.java @@ -128,7 +128,8 @@ public final void onReceive(Context context, @Nullable Intent intent) { } if (Util.SDK_INT >= 26) { if (keyEvent.getKeyCode() != KeyEvent.KEYCODE_MEDIA_PLAY - && keyEvent.getKeyCode() != KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) { + && keyEvent.getKeyCode() != KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE + && keyEvent.getKeyCode() != KeyEvent.KEYCODE_HEADSETHOOK) { // Starting with Android 8 (API 26), the service must be started immediately in the // foreground when being started. Also starting with Android 8, the system sends media // button intents to this receiver only when the session is released or not active, meaning