2016-09-12 16 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。只有在三星設備上?這不是正常的行爲。 我正在尋找一個解釋,爲什麼這個包特別是調用服務。我想找出重現它的步驟,以便我們可以將適當的證書添加到白名單或將其提交給三星作爲一個可能的錯誤。 –

相關問題