Edu*_*ard 6 android google-play-services chromecast
我正在开发同时具有Chromecast集成的流式应用程序。根据我的Crashlytics控制台,大量用户正在经历以下崩溃:
Fatal Exception: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.gms.cast.framework.action.UPDATE_NOTIFICATION pkg=com.package.name cmp=com.package.name/com.google.android.gms.cast.framework.media.MediaNotificationService (has extras) }: app is in background uid UidRecord{4ee441 u0a213 CAC bg:+11m25s10ms idle procs:1 seq(0,0,0)}
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1538)
at android.app.ContextImpl.startService(ContextImpl.java:1484)
at android.content.ContextWrapper.startService(ContextWrapper.java:663)
at com.google.android.gms.internal.cast.zzai.zzg(Unknown Source:269)
at com.google.android.gms.internal.cast.zzai.onStatusUpdated(Unknown Source:1)
at com.google.android.gms.cast.framework.media.zzr.onStatusUpdated(Unknown Source:30)
at com.google.android.gms.internal.cast.zzdh.onStatusUpdated(Unknown Source:6)
at com.google.android.gms.internal.cast.zzdh.zzn(Unknown Source:573)
at com.google.android.gms.cast.framework.media.RemoteMediaClient.onMessageReceived(Unknown Source:2)
at com.google.android.gms.internal.cast.zzct.run(Unknown Source:34)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我无法复制它,这就是为什么我在这里发布它。Chromecast设备似乎正在尝试在后台通知我的应用程序。
所有崩溃仅发生在Oreo上,并且在应用程序处于后台时出现。
崩溃不是在几个版本之前就存在的,而且我有一段时间没有更改Chromecast代码了,所以我感觉到它的原因是更新了build.gradle文件中的某些依赖项。
有几个崩溃组具有相同的原因和堆栈跟踪,但是每个崩溃组具有不同的UidRecord。
我已经了解了Oreo中的后台执行限制,但是这似乎是我无法控制的,因为我自己没有涉及任何服务。
由于我需要为按钮自定义外观,因此这就是我集成Chromecast功能的方式:
<android.support.v7.app.MediaRouteButton
android:id="@+id/btn_cast".../>
...
CastButtonFactory.setUpMediaRouteButton(context, binding.btnCast);
binding.btnCast.setRemoteIndicatorDrawable(ContextCompat.getDrawable(context, R.drawable.ic_control_bar_cast));
...
CastContext castContext = CastContext.getSharedInstance(context);
castContext.addCastStateListener(this);
...
@Override
public void onCastStateChanged(int state) {
switch (state) {
case CastState.CONNECTED:
...
}
}
...
CastSession currentCastSession = castContext.getSessionManager().getCurrentCastSession();
...
RemoteMediaClient remoteMediaClient = currentCastSession.getRemoteMediaClient();
...
remoteMediaClient.load(mediaInfo, mediaLoadOptions);
Run Code Online (Sandbox Code Playgroud)
基本上,单击按钮会打开系统对话框,您可以在其中选择设备。当您选择一个设备时,将调用该回调,然后使用RemoteMediaClient类的load()方法发送要播放的数据。
我的依赖项是:
implementation 'com.android.support:mediarouter-v7:27.1.1'
implementation 'com.google.android.gms:play-services-cast-framework:15.0.1'
Run Code Online (Sandbox Code Playgroud)
我已经对这些库进行了几次更新,希望问题能够解决(我认为问题始于27.0.2和11.8.0)。
知道在什么情况下以及如何解决的情况下会发生什么情况吗?
谢谢!
小智 5
我使用相同的强制转换框架版本在我的应用程序中遇到了相同的问题。查看Google发行说明,将其更新为16.0.1可能会解决该问题:
投
修复了IllegalStateException,该异常在RemoteMediaPlayer和RemoteMediaClient中的查找请求超时时发生。这是15.0.0中引入的回归。客户应更新到16.0.1或更高版本以获取此修复程序。
https://developers.google.com/android/guides/releases
| 归档时间: |
|
| 查看次数: |
929 次 |
| 最近记录: |