首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:需要%1个处理android.media.browse.MediaBrowserService的服务,但找到%2个

Android:需要%1个处理android.media.browse.MediaBrowserService的服务,但找到%2个
EN

Stack Overflow用户
提问于 2021-03-17 15:08:38
回答 1查看 98关注 0票数 2

我在Firebase Crashylytics中发现了一些关于MediaBrowserService的崩溃。我认为这是因为我在清单中注册了两项服务,但只允许其中一项。

完整的堆栈跟踪

代码语言:javascript
复制
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中的服务

代码语言:javascript
复制
<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>

不幸的是,我两个都需要。有没有办法解决这个问题?或者,我可以只使用一个吗?

EN

回答 1

Stack Overflow用户

发布于 2021-06-29 19:51:43

正如我从谷歌文档中看到的,只有当应用程序被终止,并且用户试图单击耳机上的按钮时,才会调用MediaButtonReceiver:

如果您运行的是Android8.0(API26级)或更高版本,系统会尝试查找在本地播放音频的带有MediaSession的最后一个应用程序。如果会话仍然处于活动状态,Android会直接将事件发送给它。否则,如果会话不是活动的,并且它有一个媒体按钮接收器,Android会将事件发送到接收器,接收器将重新启动会话,因此它可以接收事件。

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

所以,我认为这是一种罕见的情况,所以你可以从你的清单中删除这些行,而不是处理这种情况:

代码语言:javascript
复制
<receiver android:name="androidx.media.session.MediaButtonReceiver">
    <intent-filter>
        <action android:name="android.intent.action.MEDIA_BUTTON" />
    </intent-filter>
</receiver>

或者你可以实现你自己的定制MediaButtonReceiver,它将选择合适的媒体服务在应用程序被终止时启动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66668427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档