我正在尝试创建一个弹出式对话框,该对话框仅在应用程序首次运行后显示,该对话框将提醒用户应用程序中的新更改。所以我有一个像这样的对话框弹出窗口:
new AlertDialog.Builder(this).setTitle("First Run").setMessage("This only pops up once").setNeutralButton("OK", null).show();
一旦他们解雇它,它将在下次更新后重新启动或重新安装应用程序。
如何将上面的对话框代码设置为仅运行一次?
答案 0 :(得分:71)
使用SharedPreferences存储isFirstRun
值,并根据该值检入启动活动。
如果设置了该值,则无需显示该对话框。如果是,则显示对话框并在SharedPreferences中保存isFirstRun
标志。
示例:
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();
}
}
答案 1 :(得分:19)
虽然其他答案的一般概念是合理的,但您应该保持共享首选项不是布尔值,而是第一次运行的最后一次发生时间或最后一个应用程序版本的时间戳。
原因是您可能希望在升级应用程序时也运行第一个运行对话框。如果只保留一个布尔值,在应用程序升级时,该值仍然为true,因此您的代码代码无法知道它是否应该再次运行它。
答案 2 :(得分:7)
像这样,您可以在新安装和更新之间做出改变。
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 :(得分:3)
我使用它在首次运行时显示帮助对话框。我不希望在更新后显示。这更适合更改日志。
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();
}
}
答案 4 :(得分:2)
没有实际问题,但我想你想知道如何达到预期的效果。如果是这种情况,那么使用SharedPreference
对象获取布尔值“first run”,默认为true,并在第一次运行后将其设置为false。
答案 5 :(得分:1)
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卡中。希望能帮助到你 !