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.