Используйте MediaButton для управления приложением переднего плана (без звука) со звуком в фоновом режиме.
Я хочу использовать кнопки мультимедиа для управления приложением переднего плана, но не для использования звука. Таким образом, цель состоит в том, чтобы обнаруживать нажатия кнопок для выполнения определенных действий в приложении.
Я могу добиться этого, используя
MediaSession
и
MediaButtonReceiver
. глянь сюда
Проблема в том, что когда приложение используется, пользователи часто проигрывают музыку в фоновом режиме, поэтому аудиофокус фонового приложения берет на себя управление MediaSession, и я больше не могу управлять своим приложением.
Есть ли способ добиться этого? Непосредственное прослушивание нажатий кнопок с помощью
onKeyDown
не работает.
1 ответ
к сожалению, нет возможности для двух активных одновременно. если другое приложение воспроизводит музыку и запускается, то ваше не имеет фокуса и не активно ... это сделано специально - лучший UX - только одно приложение-«плеер» может воспроизводить музыку (или видео). если бы это не работало так, и вы могли бы воспроизводить музыку несколькими приложениями одновременно, то как должна работать кнопка мультимедиа, например, в наушниках? приостановить/возобновить всех игроков? это просто не удобно для пользователя, поэтому команда Android представила шаблон с возможностью вызова «сфокусироваться на мне сейчас» любым приложением, но затем другое приложение / останавливается и не получает никаких входных данных (этот активный сеанс делает)
если вам нужны физические нажатия кнопок, то
onKeyDown
должно работать (внутри
Activity
или в конечном итоге используя
AccessibilityService
, который будет работать «глобально» во всей системе). если вам нужно нажать несколько экранных кнопок уведомлений, просто создайте собственный макет для вашего уведомления с любым количеством кнопок, даже в стиле плеера
обратите внимание, что в Android 11 активно
MediaSession
уведомление прикрепляется к верхней части раздела уведомлений, когда вы раскрываете строку состояния. ваше пользовательское уведомление будет где-то ниже между всеми остальными (вы можете немного манипулировать положением, используя параметр приоритета для уведомления/канала)