2016-09-12 10 views
1

Наше приложение содержит MediaBrowserService и использует белый список, чтобы ограничить, кто может запросить услугу. Он обычно используется, чтобы разрешить Android Auto и Android Wear запрашивать наше приложение для аудиоконтента. Насколько я знаю, это по-прежнему рекомендуемый подход. Например, как показано в этом примере приложения Google: MediaBrowserService sample appПочему пакет «com.android.bluetooth» запрашивает наш MediaBrowserService на устройствах Samsung?

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

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

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

UPDATE 1:

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

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

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

UPDATE 2:

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

+0

Любой прогресс в этом вопросе? Какие-нибудь новые вещи? – Kenumir

+0

Нет. Мы использовали для регистрации всех абонентов MediaBrowserService, не включенных в список белого цвета, но эти устройства Samsung рассылали его так сильно, что мы просто перестали записывать эту информацию. Поэтому я «исправил» его, больше не ища его. ¯ \ _ (ツ) _/¯ –

+0

Я полагаю, это может быть связано с их часами на основе Tizen, но если это так, кажется странным неоднократно вызывать MediaBrowerService, когда часы не подключены. У меня нет доступа к часам Gear для проверки этой теории. –

ответ

0

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

Если вы используете MediaSessionCompat таким образом, объясняется документацией Using media buttons to restart an inactive media session, эти устройства 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 от Samsung 6.0.1 Android. Я не встречал никаких других устройств или каких-либо других сборок Samsung Android, которые выполняют этот любопытный вызов com.android.bluetooth.

0

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

Как уже упоминалось в Media browsing,

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

Для этого недавнего Android 5.0 Behavior Changes, вы должны тщательно оценить возможные воздействия на приложение для заданных точек, чтобы рассмотреть такие как Custom Permissions. Помимо этого, рекомендуется также немедленно изучить ваше приложение, внести необходимые корректировки и как можно скорее опубликовать обновленную версию для своих пользователей.

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

+0

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