有时应用的弹框提醒,仅需每天第一次运行的时候提示用户。
可以通过本地存储一个日期值, 和系统的日期值做比较,不相等则弹框。
其中:
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())
}