diff --git a/RELEASENOTES.md b/RELEASENOTES.md index df2116a0de..e241858bef 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 815e9c2898..e2ea6d89b5 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