Android ChromeCast RuntimeException: удаленная загрузка не удалась. Локальный запасной вариант не найден

Я использую функцию приведения в моем приложении. Это работало нормально, но внезапно я вижу увеличение количества сбоев на консоли магазина игр.

Я правильно инициализирую 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.os.Handler.dispatchMessage(Handler.java:111) на android.os.Looper.loop(Looper.java:194) на android.app.ActivityThread.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) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815) Вызывается java.lang.RuntimeException: com.google.android.gms.dynamite.DynamiteModule$zza: Ошибка удаленной загрузки. Местный запасной вариант не найден.

Код Я получаю сообщение об ошибке, если условие означает, что речь идет не о доступности службы Google Play.

   if (googlePlayServicesVerified(context)) {  // checking (result==ConnectionResult.SUCCES)
      Log.d("TAG", "instantiated");
      castContext = CastContext.getSharedInstance(context);
    } else {
      Log.e(TAG, "FAILED");
    }

Подана ошибка в Google:

https://issuetracker.google.com/issues/65359941

** Обновление ** Проверьте эти две проблемы:

https://issuetracker.google.com/issues/65359941 https://issuetracker.google.com/issues/79405933

Временное решение в моем ответе.

2 ответа

Это временное решение.

1) Ваше приложение должно всегда проверять версию GPS перед использованием любых API-интерфейсов Cast

2) Разрешить CastContext.getSharedInstance() для сбоя. Вероятно, сгенерировать / перехватить исключение (или альтернативно вернуть ноль).

3) Убедитесь, что вы ничего не сломаете, если модуль динамита не загружается. Существуют некоторые виджеты пользовательского интерфейса, которые неявно инициализируются и вызывают 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;
  }
}

Я получаю эту проблему, когда сервисы play устарели (в основном на эмуляторах, работающих под 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();

Я запускаю этот код в Activity, которая проверяет, нужно ли запускать MainActivity.

Другие вопросы по тегам