Android: всплывающее окно при первом запуске
Я пытаюсь сделать всплывающее диалоговое окно, которое отображается только после первого запуска приложения, которое будет предупреждать пользователей о новых изменениях в приложении. Таким образом, у меня есть всплывающее окно диалога, как это:
new AlertDialog.Builder(this).setTitle("First Run").setMessage("This only pops up once").setNeutralButton("OK", null).show();
Как только они отклонят его, он не вернется до следующего обновления или переустановит приложение.
Как настроить приведенный выше код диалога для запуска только один раз?
5 ответов
Используйте 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();
}
}
В то время как общая идея других ответов является правильной, в общих настройках следует хранить не логическое значение, а отметку времени, когда был последний раз, когда произошел первый запуск, или последней версии приложения, для которой это произошло.
Причиной этого является то, что вы, вероятно, захотите запустить диалог первого запуска, а также при обновлении приложения. Если вы сохраняете только логическое значение, при обновлении приложения значение все равно будет истинным, поэтому код вашего кода не сможет узнать, следует ли ему запустить его снова или нет.
Таким образом, вы можете сделать разницу между новой установкой и обновлением.
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();
}
Я использую это для отображения диалогового окна справки при первом запуске. Я не хочу, чтобы это показывалось после обновления. Это лучше подходит для журнала изменений.
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();
}
}
Нет актуального вопроса, но я предполагаю, что вы хотите знать, как достичь желаемого эффекта. Если это так, то используйте SharedPreference
объект, чтобы получить логическое "первый запуск", который по умолчанию имеет значение "истина", и установить его в "ложь" сразу после первого запуска.
loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE);
loginPrefsEditor = loginPreferences.edit();
doFirstRun();
private void doFirstRun() {
SharedPreferences settings = getSharedPreferences("PREFERENCE", MODE_PRIVATE);
if (settings.getBoolean("isFirstRun", true)) {
loginPrefsEditor.clear();
loginPrefsEditor.commit();
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("isFirstRun", false);
editor.commit();
}
}
Я использовал этот код, чтобы убедиться, что приложение запускается впервые. LoginPrefsEditor очищен от данных, потому что у меня есть кнопка "Запомнить меня", которая сохраняет данные на SD-карту. Надеюсь, это поможет!