Фон: у меня есть Bluetooth-гарнитура A2DP / AVRCP ( Nokia BH-505 ), которую я активно использую для прослушивания как подкастов, так и музыки. Конечно, я слушаю их в разных приложениях. На гарнитуре Bluetooth есть несколько кнопок «команда» (AVRCP), относящихся к аудио - в частности: «следующая дорожка», «предыдущая дорожка» и «воспроизведение / пауза»
В настоящее время, когда я нажимаю любую из команд, один из установленных музыкальных проигрывателей ( Meridian ) всегда получает команду, даже когда она не активна. Поэтому, когда я нажимаю «play / pause», намереваясь приостановить подкаст ( DoggCatcher ), вместо этого активируется Meridian, и он начинает воспроизводить музыку вместе с подкастом.
Оба игрока настроены на использование гарнитуры: в DoggCatcher включена функция «Привязать к гарнитуре», а в Meridian - «Кнопки гарнитуры». В настоящее время я использую некорневую Android 2.2.1 на GT-S5570, но, возможно, буду рутировать и обновлять до 2.3 CyanogenMod (или такого) в будущем.
Игнорируя специфику, мой вопрос об этом является более общим:
- Как Android определяет, какое приложение реагирует на эти команды? Я заинтересован даже в очень техническом ответе.
С практической стороны я заинтересован в:
- Нужно ли возиться с настройками каждого приложения, чтобы определить, какое приложение принимает команды, или есть какой-то общий способ определения этого?
- Есть ли способ настроить это так, чтобы приложение, которое действительно активно , автоматически получало приоритет? (как было задано частично в другом вопросе )
Чем этот вопрос отличается от похожих вопросов:
«Как настроить поведение кнопки« Воспроизвести »на пульте Bluetooth» - только практичный, другой фокус, пока нет ответов, и меня также интересуют ответы, для которых потребуется рут или нестандартная прошивка (особенно CyanogenMod).
Изменить приложение по умолчанию для обработки элементов управления гарнитурой - точная проблема, которая была исправлена, но не так, чтобы отвечать на мои вопросы, хотя она дает некоторые подсказки о том, как все работает.
Как сделать так, чтобы кнопка на моих наушниках управляла чем-то другим, кроме штатного музыкального плеера? - частично похожий вопрос с практической стороны, но не фокусируюсь на объяснении, как это на самом деле работает, и единственный ответ сфокусирован на той части, о которой я не спрашиваю (заставить только одно приложение получать команды).
Почему все звуковые приложения получают события кнопок Bluetooth, все сразу - очень похоже, но спрашивают о конкретной проблеме (все медиаплееры получают команду AVRCP)
источник
Ответы:
media-button-router , уже упомянутый в одном из ваших связанных вопросов, пытается выяснить, какое приложение в настоящее время воспроизводит музыку, и отправлять на него события AVRCP. Кроме того, в нем перечислены все установленные приложения, которые объявляют о прослушивании событий AVRCP.
Что делает AVRCP сложным: некоторые приложения, такие как Sony Music Unlimited , похоже, не заявлены
android.intent.action.MEDIA_BUTTON
в своем манифесте. По этой (или, возможно, по какой-то другой) причине ими нельзя управлять через медиа-кнопку-роутер. Я знаю, что, например, Music Unlimited можно управлять через AVRCP, так как я прочитал его в комментарии пользователя, а также смог запустить его один раз, но, к сожалению, он не воспроизводится. Таким образом, в этих случаях кажется, что мы должны ждать обновления приложения с чистой реализацией обработки событий AVRCP.Согласно вики-медиа-кнопки-маршрутизатора «Обработка намерений медиа-кнопки осуществляется через упорядоченные широковещательные рассылки, и каждое приложение устанавливает свой собственный приоритет для получения». Поэтому, возможно, можно было бы написать приложение, которое отображает эти приоритеты и, по сути, позволит вам определить, какое приложение будет запущено. Однако я не знаю о таком приложении.
источник
Наконец, они добавили раздел, чтобы ответить на этот точный вопрос: https://developer.android.com/guide/topics/media-apps/mediabuttons.html
источник
Возможно, это поможет немного:
Samsung S5 -> Bluetooth-приемник + Разъемы для наушников
Я использую Samsung S5, сначала с приложением 7digital для загрузки и воспроизведения музыки. Затем я изменил и использовал Cloudplayer. Но каждый раз, когда Clouplayer играет и я нажимаю кнопку паузы / воспроизведения на своем Bluetooth-приемнике, мое 7-цифровое приложение начинает воспроизводить музыку. Я не мог изменить любой параметр, чтобы изменить воспроизведение / паузу Bluetooth в Cloudplayer. Затем я удалил всю свою 7digital загруженную музыку и попробовал снова. Проблема решена! Play / pause теперь как-то связан с Cloudplayer.
источник
Это не проблема с вашим устройством BT. При подключении к телефону Bluetooth-гарнитура воспроизводит активный поток A2DP, инициированный с мобильного телефона. Если это какой-то стандартный медиаплеер на вашем телефоне, он может реагировать на все команды управления AVRCP, такие как пропуск паузы воспроизведения, fw и т. Д. Теперь, когда вы проигрываете что-то в Интернете или какой-либо другой плеер, который не реализует все такие элементы управления через AVRCP, для BT Headset - это все еще активный поток A2DP. Он отправит сообщения управления AVRCP на ваш телефон. Теперь ваш телефон должен направлять эти команды в соответствующее приложение в большинстве случаев к активному потоковому источнику A2DP, или в вашем случае ваш телефон все еще пересылает команды AVRCP на музыкальный проигрыватель по умолчанию.
Лучше всего попытаться настроить свой мобильный телефон при условии, что воспроизводимый источник поддерживает управление AVRCP. Если этого не произойдет, вы все равно ничего не сможете сделать. Если это так, то Mobile обязательно должен разрешить обработку этих команд AVRCP вашим активным потоковым источником A2DP.
источник
Это приложение будет "Маршрутизатор мультимедийных кнопок" https://play.google.com/store/apps/details?id=com.harleensahni.android.mbr
источник