首页 > 解决方案 > 确定应用程序启动 Java 后 30 天

问题描述

如何在用户首次启动应用程序 30 天后弹出警报对话框。

我想在使用该应用程序 30 天后显示一个警报对话框,访问日历的方法有效,但是当用户使用设置更改手机日期时,该方法失败。

这个工作的空闲方式是什么?这可以使用 Sessions、Handlers 或 Runnable 方法来实现吗?

标签: javaandroid

解决方案


首次启动应用程序时,获取当前纪元时间并将其保存在共享首选项中,例如 FIRST_LAUNCH_SECONDS。在每次后续启动时,检查当前纪元时间是否比 FIRST_LAUNCH_SECONDS 大 2592000 秒。(30 天 = 2592000 秒)

在主活动 onCreate 中,调用以下方法:

void showAlertAfterOneMonth(){ 
    long currentTime = System.currentTimeMillis() / 1000;      //in seconds

    SharedPreferences prefs = getSharedPreferences("SHARED_PREF", MODE_PRIVATE);
    long firstLaunchTime = pref.getLong("FIRST_LAUNCH_SECONDS", currentTime)
    long isAlertShown = pref.getBoolean("ALERT_SHOWN", false)

    if (isAlertShown){
        // alert has already been shown once after one month. so do nothing.
        return
    }
    else if (currentTime - firstLaunchTime == 0){
        // this is first launch, set the time in shared preference
        SharedPreferences.Editor editor = sharedPreferences.edit(); 
        editor.putString("FIRST_LAUNCH_SECONDS", currentTime);
        editor.commit(); 
    }
    else if(currentTime - firstLaunchTime >= 2592000){
        // one month has completed after first launch, show alert.

        // Save a flag in shared preference so that alert will be shown 
        // only ONCE after one month is completed.
        SharedPreferences.Editor editor = sharedPreferences.edit(); 
        editor.putBoolean("ALERT_SHOWN", true);
        editor.commit(); 
    }
}

但是,如果重新安装应用程序或清除应用程序缓存,共享首选项将被清除。

更新:显然,如果用户更改系统时间,currentTimeMillis 会发生变化。如果您想要更简单的解决方案,您可以使用System.nanoTime()而不是 System.currentTimeMillis()。


推荐阅读