From 07e9c659d75e8f295a6a6feebb1090ad532e36fb 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 PiperOrigin-RevId: 662515428 (cherry picked from commit c48c051ce29d50411bbc0aaeeae4973354688574) --- 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 df2116a0de1..e241858bef7 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -33,6 +33,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 815e9c28981..e2ea6d89b5f 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaButtonReceiver.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaButtonReceiver.java @@ -123,7 +123,8 @@ public final void onReceive(Context context, @Nullable Intent intent) { KeyEvent keyEvent = checkNotNull(intent.getExtras()).getParcelable(Intent.EXTRA_KEY_EVENT); if (keyEvent != null && 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