在警报管理器应用程序中。 这是我的调度程序类:
class AndroidAlarmScheduler(val context: Context) : AlarmScheduler {
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
@SuppressLint("MissingPermission")
@RequiresApi(Build.VERSION_CODES.O)
override fun schedule(alarmData: AlarmData) {
val currentDate = LocalDateTime.now()
// Combine the current date with the provided time to create a LocalDateTime
val dateTimeToSchedule = LocalDateTime.of(currentDate.toLocalDate(), alarmData.time)
// Get the epoch milliseconds from LocalDateTime
val milliseconds = dateTimeToSchedule.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()
val intent = Intent(context,AlarmCancelHandler::class.java)
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
milliseconds,
PendingIntent.getBroadcast(
context,
alarmData.id.toInt(),
intent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
)
Log.d("CHECKITOUT","ALARM SET")
}
override fun cancel(alarmData: AlarmData) {
alarmManager.cancel(
PendingIntent.getActivity(
context,
alarmData.id.toInt(),
Intent(context, AlarmCancelHandler::class.java),
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
)
}
}
我的广播接收器代码:
class AlarmCancelHandler : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.d("CHECKITOUT", "ON RECEIVE CANCEL")
val newIntent = Intent(context, AlarmReceiveActivity::class.java)
newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
try {
context?.startActivity(newIntent)
Log.e("CHECKITOUT", "Activity started successfully")
} catch (e: Exception) {
Log.e("CHECKITOUT", "Error starting activity: $e")
}
}
}
当应用程序处于后台时,它工作正常 - 活动在指定时间立即出现在前面,但是当我从后台删除应用程序时,Logcat 显示
OnReceive
和活动已启动,但活动未启动
您无法在现代版本的 Android 上从后台启动活动。请显示
Notification
。