我们的应用程序包含一个 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 watch 有关吗?
- 银河注 4 (SM-N910R4)
- 银河注 4 (SAMSUNG-SM-N910A)
- 银河注 5 (SM-N920V)
- 银河 S5 (SM-G900V)
- Galaxy S5 Active (SAMSUNG-SM-G870A)
- 银河 S6 (SM-G920R7)
- 银河 S6 (SAMSUNG-SM-G890A)
- 银河 S7 边缘 (SM-G935V)
- 银河 S7 边缘 (SAMSUNG-SM-G935A)
- 银河 J7 (SM-J700T1)
更新 2:
我终于在装有 6.0.1 的 Galaxy S6 Edge 上重现了这种情况。只需打开设备上的蓝牙即可。如果打开,甚至没有任何配对或连接,当我开始在我们的应用程序“com.android.bluetooth”(UID 1002)中播放音频时,调用 onGetRoot
和 onLoadChildren
媒体浏览器服务
。为什么!?如果我允许,设备上没有任何可见的变化。我以为我可能会看到一些三星小部件显示我们应用程序中的媒体信息...但我没有。
最佳答案
我偶然发现了某种答案。由于可能只有三星人才知道的原因,MediaBrowserServiceCompat.onGetRoot
按包“com.android.bluetooth”调用涉及 MediaSessionCompat.setMediaButtonReceiver
.
如果您使用 MediaSessionCompat
以 Using media buttons to restart an inactive media session 的文档解释的方式,这些三星设备正在查询 MediaBrowserServiceCompat.onGetRoot
在媒体按钮事件发送到 BroadcastReceiver
之前使用 com.android.blueooth 包由 MediaSessionCompat.setMediaButtonReceiver
配置当 Android 尝试恢复上一个 Activity 的 MediaSession 时。
如果调用onGetRoot
返回 null 因为您没有将 com.android.bluetooth 包列入白名单,您的 BroadcastReceiver 将不会接收媒体按钮事件并且不活动的媒体 session 将不会恢复。您可以将包裹完全列入白名单并返回正常的 BrowserRoot
的真实数据或返回空 BrowserRoot
.例如,new MediaBrowserServiceCompat.BrowserRoot("myroot", null)
.三星似乎没有实际使用根数据或对 MediaBrowserServive.onLoadChildren
进行后续调用因此,您响应 com.android.bluetooth 发出的 onGetRoot 调用返回什么似乎并不重要,它不能是 null
。 .
同样,这种情况似乎是三星 6.0.1 Android 版本所独有的。我没有遇到任何其他设备或任何其他 Samsung Android 版本通过 com.android.bluetooth 执行这个奇怪的调用。
关于android - 为什么包 "com.android.bluetooth"在三星设备上查询我们的 MediaBrowserService?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39454127/