广播接收器未启动活动

问题描述 投票:0回答:1

在警报管理器应用程序中。 这是我的调度程序类:

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 kotlin android-jetpack-compose broadcastreceiver
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.