Почему пакет com.android.bluetooth запрашивает нашу службу MediaBrowserService на устройствах Samsung?

Наше приложение содержит MediaBrowserService и использует белый список, чтобы ограничить, кто может запрашивать службу. Обычно он используется, чтобы разрешить Android Auto и Android Wear запрашивать у нашего приложения аудиоконтент. Насколько я знаю, это все еще рекомендуемый подход. Например, как показано в этом примере приложения Google: пример приложения MediaBrowserService

Наше приложение сообщает имена пакетов, которые пытаются запросить наш MediaBrowserService, но НЕ находятся в белом списке. Мы довольно регулярно получаем сообщения о том, что "com.android.bluetooth" пытался позвонить в нашу службу и получил отказ.

Я озадачен этими сообщениями. Мы никогда не видели таких вызовов из этого пакета на наших собственных тестовых устройствах. Мои предыдущие попытки спросить пользователя, есть ли у него устройство Bluetooth, которое может отображать аудиоинформацию, были встречены с замешательством... так что, похоже, сам Android делает эти звонки?

кто-нибудь еще сталкивался с этим? Этот подход с использованием белого списка требует проверки определенных сертификатов подписи. Есть ли у com.android.bluetooth согласованный сертификат подписи, который можно использовать для добавления этого пакета в белый список?

ОБНОВЛЕНИЕ 1:

Глядя на отчеты, которые мы получили от пользователей, кажется, что это исключительно феномен Samsung Android 6.0.1. Первое сообщение об этом появилось 13 марта 2016 года, и все лето шел постоянный поток.

Вот неполный список моделей, которые сообщили об этой проблеме. Все они имели Android 6.0.1. Может ли это быть связано с их часами Galaxy Gear на базе Tizen?

  • Галактика Примечание 4 (SM-N910R4)
  • Galaxy Note 4 (SAMSUNG-SM-N910A)
  • Galaxy Note 5 (SM-N920V)
  • Галакси С5 (SM-G900V)
  • Galaxy S5 активный (SAMSUNG-SM-G870A)
  • Галактика С6 (SM-G920R7)
  • Галактика S6 (SAMSUNG-SM-G890A)
  • Край Galaxy S7 (SM-G935V)
  • Край Galaxy S7 (SAMSUNG-SM-G935A)
  • Галактика J7 (SM-J700T1)

ОБНОВЛЕНИЕ 2:

Наконец-то я воспроизвел ситуацию на Galaxy S6 Edge с 6.0.1. Bluetooth на устройстве просто должен быть включен. Если он включен, даже без сопряжения или подключения, когда я начинаю воспроизводить аудио в нашем приложении, «com.android.bluetooth» (UID 1002) вызывает onGetRoot и onLoadChildren на нашем MediaBrowserService. ЗАЧЕМ!? Если я позволю, на устройстве ничего не изменится. Я думал, что увижу какой-нибудь виджет Samsung, представляющий мультимедийную информацию из нашего приложения... но я не вижу.


person Robert Nekic    schedule 12.09.2016    source источник
comment
Есть ли прогресс в этом? Какие-нибудь новые вещи?   -  person Kenumir    schedule 26.01.2017
comment
Нет. Раньше мы регистрировали всех вызывающих абонентов нашего MediaBrowserService, не внесенных в белый список, но эти устройства Samsung так рассылали спам, что мы просто перестали регистрировать эту информацию. Поэтому я исправил это, больше не ища его. ¯_(ツ)_/¯   -  person Robert Nekic    schedule 26.01.2017
comment
Я предполагаю, что это может быть связано с их часами на основе Tizen, но если это так, то кажется странным многократно вызывать MediaBrowerService, когда часы не подключены. У меня нет доступа к часам Gear, чтобы проверить эту теорию.   -  person Robert Nekic    schedule 26.01.2017


Ответы (2)


Я наткнулся на ответ, своего рода. По причинам, которые, вероятно, известны только кому-то из Samsung, вызов MediaBrowserServiceCompat.onGetRoot пакета "com.android.bluetooth" относится к MediaSessionCompat.setMediaButtonReceiver.

Если вы используете MediaSessionCompat способом, описанным в документации по использованию медиа-кнопок чтобы перезапустить неактивный медиа-сеанс, эти устройства Samsung запрашивают MediaBrowserServiceCompat.onGetRoot с пакетом com.android.blueooth, прежде чем события медиа-кнопки отправляются на BroadcastReceiver, настроенный MediaSessionCompat.setMediaButtonReceiver, когда Android пытается восстановить последний активный MediaSession.

Если вызов onGetRoot возвращает значение null, потому что вы не добавили пакет com.android.bluetooth в белый список, ваш BroadcastReceiver НЕ будет получать события кнопки мультимедиа, и неактивный сеанс мультимедиа не будет возобновлен. Вы можете либо полностью внести пакет в белый список и вернуть свои обычные BrowserRoot реальных данных, либо вернуть пустой BrowserRoot. Например, new MediaBrowserServiceCompat.BrowserRoot("myroot", null). Похоже, что Samsung на самом деле не использует корневые данные и не выполняет последующие вызовы MediaBrowserServive.onLoadChildren, поэтому не имеет значения, что вы возвращаете в ответ на вызовы onGetRoot, сделанные com.android.bluetooth, это просто не может быть null.

Опять же, эта ситуация кажется уникальной для Android 6.0.1 от Samsung. Я не встречал никаких других устройств или любых других сборок Samsung Android, которые выполняют этот любопытный вызов через com.android.bluetooth.

person Robert Nekic    schedule 20.03.2017
comment
это действительно глупо, я наткнулся на ту же проблему на Samsung J5 - person rahimli; 23.10.2019

Вероятнее всего, это связано с новыми функциями, которые Android 5.0 предлагает пользователям и разработчикам приложений, включая самые заметные новые API Android 5.0.

Как упоминалось в просмотре мультимедиа,

Android 5.0 предоставляет приложениям возможность просматривать библиотеку мультимедийного контента другого приложения с помощью новой API android.media.browse.

За последние изменения поведения Android 5.0< /a>, вам следует тщательно оценить возможные последствия для вашего приложения по указанным пунктам, например Пользовательские разрешения. Кроме того, также рекомендуется немедленно проверить свое приложение, внести необходимые корректировки и как можно скорее опубликовать обновленную версию для своих пользователей.

Надеюсь, это поможет!

person Teyam    schedule 13.09.2016
comment
Вы описываете MediaBrowserService? Да, я понимаю его основные функции. В конце концов, он в нашем приложении уже год или два. Вопрос в том, почему пакет com.android.bluetooth специально вызывает MediaBrowserService. И только на устройствах Samsung? Это ненормальное поведение. Я ищу объяснение, почему именно этот пакет вызывает службу. Я хотел бы выяснить, как воспроизвести его, чтобы мы могли либо добавить соответствующий сертификат в белый список, либо отправить его в Samsung как возможную ошибку. - person Robert Nekic; 13.09.2016