2016-09-12 13 views
1

我们的应用程序包含一个MediaBrowserService,并使用白名单来限制谁可以查询服务。它通常用于允许Android Auto和Android Wear在我们的应用中查询音频内容。据我所知,这仍然是一个推荐的方法。例如,如下面的Google示例应用程序所示:MediaBrowserService sample app为什么包装“com.android.bluetooth”在三星设备上查询我们的MediaBrowserService?

我们的应用报告试图查询我们的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)
  • 银河注4(SAMSUNG-SM-N910A)
  • 银河注5(SM-N920V)
  • 银河S5(SM-G900V)
  • 银河S5活动(SAMSUNG-SM-G870A)
  • 银河S6(SM-G920R7)
  • 银河S6(SAMSUNG-SM-G890A)
  • 银河S7边缘(SM-G935V)
  • 银河S7边缘(SAMSUNG-SM-G935A)
  • 银河J7(SM-J700T1)

更新2:

我终于与复制的情况在银河S6边缘6.0.1。只需打开设备上的蓝牙即可。如果打开,甚至没有任何配对或连接,当我开始在我们的应用程序“com.android.bluetooth”(UID 1002)中播放音频时,我们的MediaBrowserService上的onGetRootonLoadChildren也会打开。为什么!?如果我允许,设备上没有任何可见的变化。我想我可能会看到一些三星小工具从我们的应用程序中呈现媒体信息......但我不知道。

+0

这个有什么进展?任何新事物? – Kenumir

+0

不可以。我们用来记录我们MediaBrowserService的所有非白名单呼叫者,但这些三星设备发送的垃圾邮件太多,我们只是停止记录此信息。所以我“修复”它不再寻找它。 ¯\ _(ツ)_/ –

+0

我想这可能与他们的基于Tizen的手表有关,但如果是这样的话,在手表未连接时反复调用MediaBrowerService似乎很奇怪。我无法使用Gear手表来测试这一理论。 –

回答

0

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

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

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

同样,这种情况似乎是三星的6.0.1 Android版本所特有的。我没有遇到任何其他设备或任何其他三星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。只有在三星设备上?这不是正常的行为。 我正在寻找一个解释,为什么这个包特别是调用服务。我想找出重现它的步骤,以便我们可以将适当的证书添加到白名单或将其提交给三星作为一个可能的错误。 –

相关问题