Android: первый всплывающий диалог запуска

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

new AlertDialog.Builder(this).setTitle("First Run").setMessage("This only pops up once").setNeutralButton("OK", null).show();

Как только они отклонят его, он не будет возвращаться до следующего обновления или переустанавливать приложение.

Как установить код диалога выше для запуска только один раз?

Ответ 1

Используйте SharedPreferences, чтобы сохранить значение isFirstRun, и проверьте свою активность запуска против этого значения.

Если значение установлено, то нет необходимости отображать диалог. В противном случае отобразите диалог и сохраните флаг isFirstRun в SharedPreferences.

Пример:

public void checkFirstRun() {
    boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getBoolean("isFirstRun", true);
    if (isFirstRun){
        // Place your dialog code here to display the dialog

        getSharedPreferences("PREFERENCE", MODE_PRIVATE)
          .edit()
          .putBoolean("isFirstRun", false)
          .apply();
    }
}

Ответ 2

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

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

Ответ 3

Как вы можете изменить разницу между новой установкой и обновлением.

String StoredVersionname = "";
String VersionName;
AlertDialog LoginDialog;
AlertDialog UpdateDialog;
AlertDialog FirstRunDialog;
SharedPreferences prefs;

public static String getVersionName(Context context, Class cls) {
    try {
        ComponentName comp = new ComponentName(context, cls);
        PackageInfo pinfo = context.getPackageManager().getPackageInfo(
                comp.getPackageName(), 0);
        return "Version: " + pinfo.versionName;
    } catch (android.content.pm.PackageManager.NameNotFoundException e) {
        return null;
    }
}

public void CheckFirstRun() {
    VersionName = MyActivity.getVersionName(this, MyActivity.class);
    prefs = PreferenceManager.getDefaultSharedPreferences(this);
    StoredVersionname = (prefs.getString("versionname", null));
    if (StoredVersionname == null || StoredVersionname.length() == 0){
        FirstRunDialog = new FirstRunDialog(this);
        FirstRunDialog.show();
    }else if (StoredVersionname != VersionName) {
        UpdateDialog = new UpdateDialog(this);
        UpdateDialog.show();
    }
    prefs.edit().putString("versionname", VersionName).commit();
}

Ответ 4

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

private void doFirstRun() {
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
        if (settings.getBoolean("isFirstRun", true)) {
            showDialog(DIALOG_HELP);
            SharedPreferences.Editor editor = settings.edit();
            editor.putBoolean("isFirstRun", false);
            editor.commit();
        }
}

Ответ 5

Нет актуального вопроса, но я предполагаю, что вы хотите знать, как достичь намеченного эффекта. В этом случае используйте объект SharedPreference для получения логического "первого запуска", который по умолчанию имеет значение true, и установите его как false сразу после первого запуска.