Когда разрешать MediaSessionCompat.onPlay, а когда запрещать при запуске Android Auto?Android

Форум для тех, кто программирует под Android
Ответить
Гость
 Когда разрешать MediaSessionCompat.onPlay, а когда запрещать при запуске Android Auto?

Сообщение Гость »


У меня есть мультимедийное приложение для Android для воспроизведения музыки. Я регистрирую службу внутри AndroidManifest.xml. Когда мое приложение запускается и моя служба отправляется onCreate(), я создаю MediaSessionCompat и регистрирую обратный вызов:

mediaSession.setCallback(new EventCallback()); Пока все хорошо. Мое приложение можно использовать, и оно воспроизводит музыку!

Однако, когда я подключаю Android Auto (с помощью desktop-head-unit) к своему приложению, вызывается EventCallback.onPlay(). В соответствии с рекомендациями по обеспечению качества Android Auto я должен убедиться, что медиафайл не воспроизводится автоматически, поэтому мне приходится перехватывать это, чтобы предотвратить воспроизведение.

Тот же обратный вызов вызывается, когда кто-то нажимает кнопку воспроизведения, и для этого события нет контекстной информации. Как же мне узнать, когда запретить воспроизведение, а когда разрешить?

Одним из способов выяснить это может быть определение того, кто запрашивает воспроизведение, но я не вижу способа сделать это с помощью обратного вызова. Я изучил это дальше, зарегистрировав getMediaSession().getCurrentControllerInfo(), но он возвращает одно и то же имя пакета, PID и UID независимо от того, происходит ли этот onPlay при запуске или через щелчок вручную.
Дополнительная информация
Мне было интересно, действительно ли мой код отправлял запрос на игру. После установки точек останова на все такие запросы и отсутствия таких вызовов я установил точки останова в системе отправки сообщений внутри MediaSession. Я вижу, что это вызывается:

Binder:16194_4 в группе «main»: RUNNING диспетчеризация: 657, MediaSession (android.media.session) onPlay:1243, MediaSession$CallbackStub (android.media.session) onTransact:422, ISessionCallback$Stub (android.media.session) execTransactInternal:1056, связыватель (android.os) execTransact:1029, связыватель (android.os) (предупреждение: трассировка стека скопирована вручную).

Однако я не вижу, что именно отправляет сообщение в onTransact — все, что я вижу, это вызывающая программа:
MediaSessionManager$RemoteUserInfo mPackageName = "com.google.android.projection.gearhead" мПид = 30672 мУид = 10050
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»