Android: всплывающее окно при первом запуске - PullRequest
25 голосов
/ 27 сентября 2011

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

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

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

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

Ответы [ 5 ]

71 голосов
/ 27 сентября 2011

Используйте 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();
    }
}
19 голосов
/ 27 сентября 2011

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

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

7 голосов
/ 15 апреля 2013

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

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();
}
3 голосов
/ 09 декабря 2011

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

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();
        }
}
2 голосов
/ 27 сентября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...