Hintergrund: Ich habe ein A2DP / AVRCP-Bluetooth-Headset ( Nokia BH-505 ), mit dem ich aktiv Podcasts und Musik höre. Natürlich höre ich diese mit verschiedenen Apps. Das Bluetooth-Headset verfügt über einige Audio-relevante "Command" (AVRCP) -Tasten: "Nächster Titel", "Vorheriger Titel" und "Wiedergabe / Pause".
Derzeit erhält immer einer der von mir installierten Musik-Player ( Meridian ) den Befehl, wenn ich einen der Befehle drücke - auch wenn er nicht aktiv ist. Wenn ich also auf "Wiedergabe / Pause" klicke , um einen Podcast anzuhalten ( DoggCatcher ), wird Meridian aktiviert und spielt Musik zusammen mit dem Podcast ab.
Beide Player verwenden das Headset: DoggCatcher hat "An Headset binden" und Meridian "Headset-Tasten" aktiviert. Ich verwende derzeit Android 2.2.1 für das GT-S5570, verwurzele mich jedoch möglicherweise und aktualisiere in Zukunft auf CyanogenMod 2.3 (oder eine ähnliche Version).
Wenn ich die Einzelheiten ignoriere, ist meine Frage allgemeiner:
- Wie bestimmt Android, welche App auf diese Befehle reagiert? Ich interessiere mich sogar für eine sehr technische Antwort.
Praktisch interessiert mich:
- Muss ich mit den Einstellungen der einzelnen Anwendungen experimentieren, um festzustellen, welche Anwendung die Befehle entgegennimmt, oder gibt es eine allgemeine Methode, um dies festzustellen?
- Gibt es eine Möglichkeit, dies so zu konfigurieren, dass die tatsächlich aktive Anwendung automatisch immer die Priorität erhält? (wie teilweise in einer anderen Frage gestellt )
Wie unterscheidet sich diese Frage von ähnlichen Fragen:
"So stellen Sie das Verhalten der Wiedergabetaste auf der Bluetooth-Fernbedienung ein" - nur praktischer, anderer Fokus, bisher ohne Antworten, und ich interessiere mich auch für Antworten, die Rooting oder benutzerdefinierte Firmware erfordern (insbesondere CyanogenMod).
Ändern Sie die Standardanwendung für die Steuerung von Headsets - ein genaues Problem, das behoben wurde, das meine Fragen jedoch nicht beantwortet, obwohl es einige Hinweise zur Funktionsweise gibt.
Wie kann ich mit der Taste meines Kopfhörers etwas anderes als den Musik-Player steuern? - Teilweise ähnliche Frage auf der praktischen Seite, aber kein Fokus darauf zu erklären, wie es tatsächlich funktioniert, und die einzige Antwort konzentriert sich auf den Teil, nach dem ich nicht frage (nur eine App muss die Befehle erhalten).
Warum erhalten alle Sound-Apps Bluetooth-Ereignisse auf einmal ? Sehr ähnlich, aber es wird nach einem bestimmten Problem gefragt (alle Media-Player erhalten den AVRCP-Befehl).
quelle
Antworten:
Der Media-Button-Router , der bereits in einer Ihrer verknüpften Fragen erwähnt wurde, versucht herauszufinden, welche App gerade Musik abspielt, und sendet die AVRCP-Ereignisse an diese. Außerdem werden alle installierten Apps aufgelistet, die das Abhören von AVRCP-Ereignissen deklarieren .
Was macht AVRCP kompliziert: Einige Apps, wie z. B. Music Unlimited von Sony , scheinen
android.intent.action.MEDIA_BUTTON
in ihrem Manifest nicht deklariert zu sein. Aus diesem (oder einem anderen) Grund können sie nicht über einen Media-Button-Router gesteuert werden. Ich weiß, dass z. B. Music Unlimited über AVRCP gesteuert werden kann, da ich es in einem Benutzerkommentar gelesen habe und es auch einmal zum Laufen bringen konnte, aber leider nicht reproduzierbar ist. In diesen Fällen müssen wir also anscheinend auf das Update einer App mit einer sauberen Implementierung der AVRCP-Ereignisbehandlung warten.Laut dem Wiki von media-button-router "Media Button Intent wird über bestellte Broadcasts gehandhabt und jede App legt ihre eigene Priorität für den Empfang fest." Vielleicht ist es also möglich, eine App zu schreiben, die diese Prioritäten anzeigt und es Ihnen tatsächlich ermöglicht, zu bestimmen, welche Anwendung gestartet wird. Allerdings kenne ich eine solche App nicht.
quelle
Sie haben schließlich einen Abschnitt hinzugefügt, um genau diese Frage zu beantworten: https://developer.android.com/guide/topics/media-apps/mediabuttons.html
quelle
Vielleicht hilft das ein bisschen:
Samsung S5 -> Bluetooth-Empfänger + In-Ear-Klinkenstecker
Ich benutze Samsung S5, zunächst mit 7digital App zum Herunterladen und Abspielen von Musik. Dann habe ich den Cloudplayer gewechselt und benutzt. Aber jedes Mal, wenn Clouplayer spielt und ich die Pause- / Wiedergabetaste an meinem Bluetooth-Empfänger drücke, beginnt meine 7digital-App mit der Musikwiedergabe. Ich konnte keine Einstellung ändern, um die Bluetooth-Wiedergabe / -Pause in Richtung Cloudplayer zu ändern. Ich habe dann alle meine 7digital heruntergeladenen Musikdateien gelöscht und es erneut versucht. Problem gelöst! Play / Pause ist jetzt irgendwie mit Cloudplayer verbunden.
quelle
Es ist kein Problem mit Ihrem BT-Gerät. Bei Kopplung mit Ihrem Telefon gibt das Bluetooth-Headset einen aktiven A2DP-Stream wieder, der vom Mobiltelefon initiiert wurde. Wenn es sich bei Ihrem Telefon um einen Standard-Media-Player handelt, kann er auf alle AVRCP-Steuerbefehle wie Überspringen der Wiedergabepause, FW usw. reagieren BT Headset es kommt noch ein aktiver A2DP Stream. Es werden AVRCP-Steuerungsnachrichten an Ihr Telefon gesendet. Es ist jetzt Ihr Telefon, das diese Befehle an die jeweilige App weiterleiten soll, in den meisten Fällen an die aktive A2DP-Streaming-Quelle, oder in Ihrem Fall leitet Ihr Telefon AVRCP-Befehle weiterhin an den Standard-Musikplayer weiter.
Versuchen Sie am besten, Ihr Mobiltelefon zu konfigurieren, sofern die von Ihnen gespielte Quelle die AVRCP-Steuerung unterstützt. Wenn dies nicht der Fall ist, können Sie sowieso nichts tun. Wenn dies der Fall ist, sollte Mobile definitiv zulassen, dass diese AVRCP-Befehle von Ihrer aktiven A2DP-Streaming-Quelle verarbeitet werden.
quelle
Diese App wäre "Media Button Router" https://play.google.com/store/apps/details?id=com.harleensahni.android.mbr
quelle