From 6f702778f43fc65659606a42dfe08429f69e5b31 Mon Sep 17 00:00:00 2001 From: Gabe Schrecker Date: Sun, 10 Sep 2017 14:17:21 +0100 Subject: [PATCH] Support control of multiple media playback applications (#807) * Added Lollipop only detection of the playing media package, using MediaSessionManager. Replicates funtionality of the Official Pebble client. --- .../receivers/GBMusicControlReceiver.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBMusicControlReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBMusicControlReceiver.java index 379475ca..1d5bf415 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBMusicControlReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBMusicControlReceiver.java @@ -18,17 +18,23 @@ package nodomain.freeyourgadget.gadgetbridge.service.receivers; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.media.AudioManager; +import android.media.session.MediaController; +import android.media.session.MediaSessionManager; import android.os.SystemClock; import android.view.KeyEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.List; + import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventMusicControl; +import nodomain.freeyourgadget.gadgetbridge.externalevents.NotificationListener; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public class GBMusicControlReceiver extends BroadcastReceiver { @@ -73,6 +79,22 @@ public class GBMusicControlReceiver extends BroadcastReceiver { Prefs prefs = GBApplication.getPrefs(); String audioPlayer = prefs.getString("audio_player", "default"); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { + MediaSessionManager mediaSessionManager = + (MediaSessionManager) context.getSystemService(Context.MEDIA_SESSION_SERVICE); + + List controllers = mediaSessionManager.getActiveSessions( + new ComponentName(context, NotificationListener.class)); + try { + MediaController controller = controllers.get(0); + audioPlayer = controller.getPackageName(); + } catch (IndexOutOfBoundsException e) { + System.err.println("IndexOutOfBoundsException: " + e.getMessage()); + } + } + + LOG.debug("keypress: " + musicCmd.toString() + " sent to: " + audioPlayer); + long eventtime = SystemClock.uptimeMillis(); Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);