我在应用程序中使用强制转换功能。它运行得很好,但突然间我看到游戏商店控制台上的崩溃次数增加了。
我正在按照指南中的定义正确初始化CastContext。此外,在调用此方法CastContext.getSharedInstance(context)
之前,我正在检查设备是否兼容,所以这应该不是问题。
即使在有或没有谷歌播放服务的模拟器上,我也无法再现这次崩溃。
任何帮助都将不胜感激。
崩溃:
致命异常:java.lang.RuntimeException:无法启动活动组件信息{….activity.TVActivityPhone}:java.lang.RuntimeException:com.google.android.gms.dynamine.DynamiteModule$zza:远程加载失败。未找到本地回退。在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)在android.app.ActivityThread.handleLaunchActivity(ActivityThreads.java:2747)在android.app.ActivityThread.access$900(ActivityThreads.java:187)android.app.ActivityThread$H.handleMessage(ActivityThreads.java:1584)在android.os.Handler.dispatchMessage(Handler.java:111)android.os.Looper.loop(Looper.java:194)android.app.ActivityThread.main(ActivityThreads.java:5877)位于的java.lang.reflect.Method.ioke(Method.java)位于的java.lang.reflect.Method.ioke(Method.java:372)com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)在com.android.internal.os.ZygoteInit.main(ZygoteNit.java:815)引起通过java.lang.RuntimeException:com.google.android.gms.dynamine.DynamiteModule$zza:远程加载失败。找不到本地回退。
代码我在if中得到一个错误,这意味着,这与谷歌播放服务的可用性无关。
if (googlePlayServicesVerified(context)) { // checking (result==ConnectionResult.SUCCES)
Log.d("TAG", "instantiated");
castContext = CastContext.getSharedInstance(context);
} else {
Log.e(TAG, "FAILED");
}
向谷歌提交错误:
https://issuetracker.google.com/issues/65359941
**更新**检查这两个问题:
https://issuetracker.google.com/issues/65359941https://issuetracker.google.com/issues/79405933
暂时的解决办法在我的回答中。
这是临时解决方案。
1) 在使用任何Cast API 之前,您的应用程序应始终检查GPS版本
2) 允许CastContext.getSharedInstance()失败。可能引发/捕获异常(或者返回null)。
3) 如果炸药模块无法加载,请确保不会损坏任何东西。有一些UI小部件是隐式初始化的,它调用CastContext.getSharedInstance(),例如MiniControllerFragment。如果炸药装不上,你应该避免让它爆炸。
public static boolean isAvailable(Context context)
{
GoogleApiAvailability availability = GoogleApiAvailability.getInstance();
return isGooglePlayServicesAvailable(context, availability) &&
isCastContextAvailable(context);
}
public static boolean isAvailable(Context context) {
if (googlePlayServicesVerified(context)) {
try {
castContext = CastContext.getSharedInstance(context);
Log.d(TAG, "CastContext instantiated");
} catch (Exception e) {
Log.report(e);
castContext = null;
}
} else {
CrashReporter.report("CastContext FAILED to be instantiated : googlePlayServicesVerified() has failed."));
castContext = null;
}
}
当播放服务过期时(主要在运行API 24的模拟器上),我会遇到这个问题。这对我有效:
GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(this);
if (resultCode == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED) {
googleApiAvailability.getErrorDialog(this, resultCode, 1000).show();
return;
}
startApp();
我在一个活动中运行此代码,该活动检查MainActivity是否应启动