Kotlin_实现每天仅弹框提醒一次

有时应用的弹框提醒,仅需每天第一次运行的时候提示用户。

可以通过本地存储一个日期值, 和系统的日期值做比较,不相等则弹框。

其中:

1. 本地存储日期值通过 SharePreference 实现存储和读取。

2. 系统日期值 通过Calendar 获取, 这里仅是判断Day

 

class MainActivity : AppCompatActivity() {
    val LAST_LAUNCH_DAY = "last_launch_day"
    private lateinit var sharePreferences : SharedPreferences

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        sharePreferences = PreferenceManager.getDefaultSharedPreferences(this)

        checkAndShowDialog()
    }

    private fun checkAndShowDialog() {
        var currDay = getCurrDay()
        var locateDay = getCurrDayFromPreference()
        Toast.makeText(
            this,
            "系统日期是 $currDay, 本地存储日期是 $locateDay",
            Toast.LENGTH_SHORT
        ).show()

        if (currDay != locateDay) {
            var dialog = AlertDialog.Builder(this)
            dialog.setTitle("提示")
            dialog.setMessage("我只是一个提示啊")
            dialog.create()
            dialog.setPositiveButton("确定") {_, _ -> {
                //相关操作
            }}

            dialog.setNegativeButton("取消") {_, _ -> {
                //相关操作
            }}
            dialog.show()
            // 更新本地存储日期
            sharePreferences.edit().putInt(LAST_LAUNCH_DAY, currDay).apply()
        }
    }

    // 本地存储日期
    private fun getCurrDayFromPreference(): Int {
        return sharePreferences.getInt(LAST_LAUNCH_DAY, 0)
    }
    // 系统日期
    private fun getCurrDay(): Int {
        return Calendar.getInstance().get(Calendar.DAY_OF_MONTH)
    }
}

 

也可以通过SimpleDateFormate获取完整的年月日,甚至时分秒, 例如每隔几个小时弹框

    // 系统日期
    private fun getCurrDate(): String {
        return SimpleDateFormat("yyyyMMdd HH:mm:ss", Locale.US).format(Date())
    }

 

你可能感兴趣的:(Kotlin,Android,Basic)