Прекратите запуск приложения, если сервисы Play устарели - PullRequest
0 голосов
/ 17 октября 2018

В своем приложении для Android я использую Google Play Services для таких вещей, как: Chromecast, Карты и аналитика.

В моем файле build.gradle я компилирую версию 12.0.0:

implementation "com.google.android.gms:play-services-cast-framework:12.0.0"
implementation "com.google.android.gms:play-services-cast:12.0.0"
implementation "com.google.android.gms:play-services-base:12.0.0"
implementation "com.google.android.gms:play-services-maps:12.0.0"
implementation "com.google.android.gms:play-services-analytics:12.0.0"
implementation "com.google.android.gms:play-services-vision:12.0.0"
implementation "com.google.android.gms:play-services-gcm:12.0.0"

Проблема заключается в том, что приложение вылетает, когда на устройстве не установлена ​​версия 12 или новее.

Итак, я сделал следующее:

In AndroidManifest.xml:

 <meta-data
      android:name="com.google.android.gms.version"
      android:value="@integer/google_play_services_version"/>

И небольшой класс, чтобы проверить, актуальны ли сервисы воспроизведения илиУстановлено:

public boolean checkIfInstalled(Context applicationContext) {
    try {
        GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
        int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(applicationContext);

        // Version is out of date
        if (resultCode != ConnectionResult.SUCCESS) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(applicationContext);
            builder.setMessage("Google Play Services is required to use this app. Install Play Services or update to the latest version to continue.");

            builder.setPositiveButton("Go to Play store", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                Log.i("PlayServicesCheck", "clicked on the button");
                }
            });

            AlertDialog alertDialog = builder.create();
            alertDialog.show();

            return false;
        }

        return resultCode == ConnectionResult.SUCCESS;
    } catch (Exception err) {
        return false;
    }
}

В onCreate (при запуске приложения) я вызываю эту функцию, чтобы проверить, все ли в порядке.Функция возвращает false, если она устарела.Итак, мой код работает на этом этапе.

@Override
protected void onCreate(Bundle savedInstanceState) {

    boolean isInstalled = checkIfInstalled(getApplicationContext());

    // this works, I get the right value back from the checkIfInstalled function
    if (isInstalled) {
        Log.i("PlayServicesCheck", "Installed");
        // Do nothing
    } else {
        Log.i("PlayServicesCheck", "Not Installed");
        // Give alert, stop everything else
    }

    super.onCreate(savedInstanceState);
}

Но как мне остановить запуск приложения, когда это происходит?Прямо сейчас он говорит: «версия устарела», но все равно продолжит запуск приложения, что приведет к падению.

Спасибо

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете позвонить finishAndRemoveTask.

Проблема с проверкой из магазина того, что Google требует времени для развертывания версии на всех серверах, поэтому может случиться так, что вы вынуждены обновитьно когда вы входите в магазин, вы все равно не видите новую версию.

В любом случае было бы лучше, если бы у вас был сервер, на который вы возвращали бы минимальную версию.Это позволит вам точно настроить, какие изменения вы хотите заставить пользователя загружать, а какие нет.Иногда это может беспокоить пользователя, если каждая версия принудительная.

...