Используйте MediaButton для управления приложением переднего плана (без звука) со звуком в фоновом режиме.

Я хочу использовать кнопки мультимедиа для управления приложением переднего плана, но не для использования звука. Таким образом, цель состоит в том, чтобы обнаруживать нажатия кнопок для выполнения определенных действий в приложении.

Я могу добиться этого, используя MediaSessionи MediaButtonReceiver. глянь сюда

Проблема в том, что когда приложение используется, пользователи часто проигрывают музыку в фоновом режиме, поэтому аудиофокус фонового приложения берет на себя управление MediaSession, и я больше не могу управлять своим приложением.

Есть ли способ добиться этого? Непосредственное прослушивание нажатий кнопок с помощью onKeyDownне работает.

1 ответ

к сожалению, нет возможности для двух активных одновременно. если другое приложение воспроизводит музыку и запускается, то ваше не имеет фокуса и не активно ... это сделано специально - лучший UX - только одно приложение-«плеер» может воспроизводить музыку (или видео). если бы это не работало так, и вы могли бы воспроизводить музыку несколькими приложениями одновременно, то как должна работать кнопка мультимедиа, например, в наушниках? приостановить/возобновить всех игроков? это просто не удобно для пользователя, поэтому команда Android представила шаблон с возможностью вызова «сфокусироваться на мне сейчас» любым приложением, но затем другое приложение / останавливается и не получает никаких входных данных (этот активный сеанс делает)

если вам нужны физические нажатия кнопок, то onKeyDownдолжно работать (внутри Activityили в конечном итоге используя AccessibilityService, который будет работать «глобально» во всей системе). если вам нужно нажать несколько экранных кнопок уведомлений, просто создайте собственный макет для вашего уведомления с любым количеством кнопок, даже в стиле плеера

обратите внимание, что в Android 11 активно MediaSessionуведомление прикрепляется к верхней части раздела уведомлений, когда вы раскрываете строку состояния. ваше пользовательское уведомление будет где-то ниже между всеми остальными (вы можете немного манипулировать положением, используя параметр приоритета для уведомления/канала)

Другие вопросы по тегам