15

我在我的应用程序中使用投射功能。它工作正常,但突然间我可以看到 Play 商店控制台上的崩溃次数有所增加。

我正在按照指南中的定义正确初始化 CastContext,此外,在调用此方法之前,我正在检查设备是否兼容,CastContext.getSharedInstance(context)所以这应该不是问题。

即使在有或没有 google-play-services 的模拟器上,我也无法重现此崩溃。

任何帮助将不胜感激。

碰撞 :

致命异常:java.lang.RuntimeException:无法启动活动 ComponentInfo{... .activity.TVActivityPhone}: java.lang.RuntimeException:com.google.android.gms.dynamite.DynamiteModule$zza:远程加载失败。未找到本地回退. 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2747) 在 android.app.ActivityThread.access$900(ActivityThread.java:187) 在 android.app .ActivityThread$H.handleMessage(ActivityThread.java:1584) 在 android.app.ActivityThread 的 android.os.Handler.dispatchMessage(Handler.java:111) 的 android.os.Looper.loop(Looper.java:194)。 main(ActivityThread.java:5877) 在 java.lang.reflect.Method.invoke(Method.java) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit $MethodAndArgsCaller.run(ZygoteInit.java:1020) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815) 由 java.lang.RuntimeException 引起:com.google.android.gms.dynamite.DynamiteModule$ zza:远程加载失败。

代码我在 if 条件下遇到错误,这与 google play 服务的可用性无关。

   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/65359941 https://issuetracker.google.com/issues/79405933

临时解决方案在我的回答中。

4

2 回答 2

4

这是临时解决方案。

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;
  }
}
于 2018-05-17T22:23:34.737 回答
-1

当播放服务过时(主要在运行 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 是否应该启动的 Activity 中运行此代码

于 2017-10-23T12:02:27.147 回答