簡體   English   中英

Android:預期 1 個服務處理 android.media.browse.MediaBrowserService,找到 2

[英]Android: Expected 1 service that handles android.media.browse.MediaBrowserService, found 2

我在 Firebase Crashylytics 中發現了一些與 MediaBrowserService 有關的崩潰。 我認為這是因為我在 Manifest 中注冊了兩個服務,但只允許一個。

完整的堆棧跟蹤

Caused by java.lang.IllegalStateException: Expected 1 service that handles android.media.browse.MediaBrowserService, found 2
       at androidx.media.session.MediaButtonReceiver.getServiceComponentByAction(MediaButtonReceiver.java:318)
       at androidx.media.session.MediaButtonReceiver.onReceive(MediaButtonReceiver.java:118)
       at android.app.ActivityThread.handleReceiver(ActivityThread.java:3612)
       at android.app.ActivityThread.access$1300(ActivityThread.java:238)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1805)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:214)
       at android.app.ActivityThread.main(ActivityThread.java:7099)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

AndroidManifest.xml 中的服務

<service
    android:name=".ServiceFromMyApp"
    android:enabled="true"
    android:exported="false" >
    <intent-filter>
        <action android:name="android.media.browse.MediaBrowserService" />
    </intent-filter>
</service>
  
<service
    android:name=".ServiceFromExternalLibrary"
    android:enabled="true"
    android:exported="false" >
    <intent-filter>
        <action android:name="android.media.browse.MediaBrowserService" />
    </intent-filter>
</service>

不幸的是,我兩者都需要。 有沒有辦法解決這個問題? 或者我什至可以只使用一個?

正如我從谷歌文檔中看到的那樣,只有在應用程序被終止並且用戶嘗試單擊耳機上的按鈕時才會調用 MediaButtonReceiver:

如果您運行的是 Android 8.0(API 級別 26)或更高版本,系統會嘗試查找最后一個具有在本地播放音頻的 MediaSession 的應用程序。 如果 session 仍處於活動狀態,則 Android 直接將事件發送給它。 否則,如果 session 沒有激活並且它有一個媒體按鈕接收器,Android 將事件發送到接收器,接收器將重新啟動 session 並接收事件。

https://developer.android.com/guide/topics/media-apps/mediabuttons#finding-a-media-session

所以,我認為這是一種罕見的情況,所以你可以從你的清單中刪除這些行而不處理這種情況:

<receiver android:name="androidx.media.session.MediaButtonReceiver">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>
</receiver>

您可以實現自己的自定義 MediaButtonReceiver,當應用程序被終止時,它將選擇適當的媒體服務來啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM