android - 为什么包 "com.android.bluetooth"在三星设备上查询我们的 MediaBrowserService?

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

我们的应用程序包含一个 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)中播放音频时,调用 onGetRootonLoadChildren 媒体浏览器服务。为什么!?如果我允许,设备上没有任何可见的变化。我以为我可能会看到一些三星小部件显示我们应用程序中的媒体信息...但我没有。

最佳答案

我偶然发现了某种答案。由于可能只有三星人才知道的原因,MediaBrowserServiceCompat.onGetRoot按包“com.android.bluetooth”调用涉及 MediaSessionCompat.setMediaButtonReceiver .

如果您使用 MediaSessionCompatUsing 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/

相关文章:

html - 在三星浏览器中禁用选择选项文本的截断?

android - 如何使用 getNetworkInfo 确定 WiFi 状态是否处于 Activity 状态?

android - 奥利奥通知栏圆形图标

android - 以编程方式检测应用是否适用于 Android Wear

android - 是否可以动态设置 Android Wear 表盘的预览图像?

android - 键盘在 Fragments 中隐藏 EditText

android - findViewByID 返回 null

java - 应用程序包路径

android - Firebase Analytics 与 WearOS 兼容吗?

android - 为什么当使用 AlarmManager.setAlarmClock() 设置时,闹钟图标仅在 Samsung Android 9 设备上不显示?