【问题标题】:Why is package "com.android.bluetooth" querying our MediaBrowserService on Samsung devices?为什么包“com.android.bluetooth”在三星设备上查询我们的 MediaBrowserService?
【发布时间】:2016-09-12 15:43:25
【问题描述】:

我们的应用程序包含一个MediaBrowserService,并使用白名单来限制谁可以查询该服务。它通常用于允许 Android Auto 和 Android Wear 向我们的应用查询音频内容。据我所知,这仍然是推荐的方法。例如,如本 Google 示例应用所示:MediaBrowserService sample app

我们的应用会报告尝试查询我们的MediaBrowserService 但不在白名单上的包名称。我们经常收到有关“com.android.bluetooth”试图调用我们的服务但被拒绝的报告。

我对这些报告感到困惑。我们从未在我们自己的测试设备上看到过来自此软件包的此类调用。我之前尝试询问用户是否有可能显示音频信息的蓝牙设备遇到了困惑......所以似乎Android本身正在拨打这些电话?

有没有其他人遇到过这种情况?这种白名单方法需要验证特定的签名证书。 com.android.bluetooth 是否有一致的签名证书可以用来将此包加入白名单?

更新 1:

从我们收到的用户报告来看,这似乎是三星 Android 6.0.1 独有的现象。它的第一份报告出现在 2016 年 3 月 13 日,整个夏天都有稳定的涓涓细流。

以下是已报告此问题的模型的部分列表。他们都拥有Android 6.0.1。这可能与他们基于 Tizen 的 Galaxy Gear 手表有关吗?

  • 银河注 4 (SM-N910R4)
  • Galaxy Note 4 (SAMSUNG-SM-N910A)
  • 银河注 5 (SM-N920V)
  • 银河 S5 (SM-G900V)
  • Galaxy S5 Active (SAMSUNG-SM-G870A)
  • 银河 S6 (SM-G920R7)
  • 银河 S6 (SAMSUNG-SM-G890A)
  • Galaxy S7 Edge (SM-G935V)
  • Galaxy S7 Edge (SAMSUNG-SM-G935A)
  • 银河 J7 (SM-J700T1)

更新 2:

我终于在带有 6.0.1 的 Galaxy S6 Edge 上重现了这种情况。只需打开设备上的蓝牙即可。如果打开,甚至没有配对或连接,当我开始在我们的应用程序“com.android.bluetooth”(UID 1002)中播放音频时,在我们的MediaBrowserService 上调用onGetRootonLoadChildren。为什么!?如果我允许,设备上没有任何可见的变化。我想我可能会看到一些三星小部件显示我们应用程序中的媒体信息......但我没有。

【问题讨论】:

  • 这方面有什么进展吗?有什么新东西吗?
  • 没有。我们曾经记录 MediaBrowserService 的所有非白名单呼叫者,但这些三星设备向它发送了大量垃圾邮件,以至于我们只是停止记录这些信息。所以我不再寻找它来“修复”它。 ¯_(ツ)_/¯
  • 我想这可能与他们基于 Tizen 的手表有关,但如果是这样,当手表未连接时重复调用 MediaBrowerService 似乎很奇怪。我无法使用 Gear 手表来测试这个理论。

标签: android wear-os samsung-mobile android-auto


【解决方案1】:

我偶然发现了一个答案。出于只有三星员工可能知道的原因,包“com.android.bluetooth”的MediaBrowserServiceCompat.onGetRoot 调用与MediaSessionCompat.setMediaButtonReceiver 相关。

如果您以Using media buttons to restart an inactive media session 文档中解释的方式使用MediaSessionCompat,则这些三星设备会在媒体按钮事件发送到配置的BroadcastReceiver 之前使用com.android.blueooth 包查询MediaBrowserServiceCompat.onGetRoot MediaSessionCompat.setMediaButtonReceiver 当 Android 尝试恢复最后一个活动的 MediaSession 时。

如果由于您尚未将 com.android.bluetooth 包列入白名单而对 onGetRoot 的调用返回 null,您的 BroadcastReceiver 将不会接收媒体按钮事件,并且不活动的媒体会话将不会恢复。您可以将包完全列入白名单并返回您的正常BrowserRoot 真实数据或返回一个空的BrowserRoot。例如,new MediaBrowserServiceCompat.BrowserRoot("myroot", null)。三星似乎并没有实际使用根数据或对MediaBrowserServive.onLoadChildren 进行后续调用,因此您响应 com.android.bluetooth 发出的 onGetRoot 调用返回什么似乎并不重要,它只是不能是@ 987654333@.

同样,这种情况似乎是三星 6.0.1 Android 版本所独有的。我没有遇到任何其他设备或任何其他三星 Android 版本通过 com.android.bluetooth 执行这个奇怪的调用。

【讨论】:

  • 这真的很傻,我在三星J5上偶然发现了同样的问题
【解决方案2】:

这很可能与 Android 5.0 为用户和应用开发者提供的新功能有关,其中包括最引人注目的新功能Android 5.0 APIs

Media browsing中所述,

Android 5.0 引入了应用程序通过新的android.media.browse API 浏览另一个应用程序的媒体内容库的能力。

对于最近的Android 5.0 Behavior Changes,您应该仔细评估可能对您的应用程序产生的影响,以便考虑给定的点,例如Custom Permissions。除此之外,还建议您立即检查您的应用,进行必要的调整,并尽快将更新版本发布给您的用户。

希望对您有所帮助!

【讨论】:

  • 您在描述 MediaBrowserService?是的,我了解它的基本功能。毕竟,它在我们的应用程序中已经存在一两年了。问题是,为什么 com.android.bluetooth 包会专门调用 MediaBrowserService。并且仅在三星设备上?这不是正常行为。我正在寻找解释为什么这个包特别是调用该服务。我想找出重现它的步骤,以便我们可以将正确的证书添加到白名单中,或者将其作为可能的错误提交给三星。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-14
  • 2020-04-28
相关资源
最近更新 更多