注意:我尝试了在 StackOverflow 上写的各种解决方案(这里的例子)。请不要在没有使用我在下面编写的测试中检查您发现的解决方案是否有效的情况下关闭它。
对应用程序有一个要求,即用户将提醒设置为在特定时间安排,因此当应用程序在这个时间被触发时,它会在后台做一些微小的事情(只是一些数据库查询操作),并显示一个简单的通知,讲述提醒。
过去,我用一个简单的代码来设置一些在相对特定的时间被调度的东西:
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val pendingIntent = PendingIntent.getBroadcast(context, requestId, Intent(context, AlarmReceiver::class.java), PendingIntent.FLAG_UPDATE_CURRENT)
when {
VERSION.SDK_INT >= VERSION_CODES.KITKAT -> alarmManager.setExact(AlarmManager.RTC_WAKEUP, timeToTrigger, pendingIntent)
else -> alarmManager.set(AlarmManager.RTC_WAKEUP, timeToTrigger, pendingIntent)
}
Run Code Online (Sandbox Code Playgroud)
class AlarmReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Log.d("AppLog", "AlarmReceiver onReceive")
//do something in the real app
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
val timeToTrigger = System.currentTimeMillis() + java.util.concurrent.TimeUnit.MINUTES.toMillis(1)
setAlarm(this, timeToTrigger, 1)
Run Code Online (Sandbox Code Playgroud)
我现在已经在新 Android 版本和带有 Android 10 的 Pixel 4 上的模拟器上测试了此代码,它似乎没有触发,或者它可能在我提供它很长时间后触发。我深知的 …