Android 当应用程序被最近的应用程序杀死时,警报管理器不工作

Android Alarm manager not working while appliction is killed from recent apps

我在我的应用程序中停留在提醒。当我的应用程序处于 运行 或在后台(最近的应用程序)时,带警报管理器的提醒工作正常,但主要问题是当我终止我的应用程序时,警报不会触发。 即使应用程序被终止,我是否应该实施任何后台服务来保持我的警报? 我的清单代码:

<receiver android:name=".ui.home.reminders.AlarmReceiver"
        android:process=":remote"
        android:exported="true"
        android:enabled="true"/>

我的接收器Class:

class AlarmReceiver: BroadcastReceiver() {
override fun onReceive(p0: Context?, p1: Intent?) {
    p0?.showToast("received")
}

}

我的闹钟设置片段:

private val calendar: Calendar by lazy {
    Calendar.getInstance()
}

我正在通过 TimePickerDialog 设置时间:

val listener = TimePickerDialog.OnTimeSetListener { p0, p1, p2 ->
                    activity?.showToast(" $p1 $p2")
                    calendar.set(Calendar.HOUR_OF_DAY, p1)
                    calendar.set(Calendar.MINUTE, p2)
                    calendar.set(Calendar.SECOND, 0)
                }
                TimePickerDialog(
                    activity!!,
                    listener,
                    calendar.get(Calendar.HOUR_OF_DAY),
                    calendar.get(Calendar.MINUTE),
                    false
                ).show()

单击设置警报按钮时:

val alarmManager =
                    Constants.context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
                val pendingIntent = PendingIntent.getBroadcast(
                    Constants.context,
                    0,
                    Intent(
                        Constants.context,
                        AlarmReceiver::class.java
                    ),
                    0
                )
                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent)

我看过各种示例,但其中 none 似乎对我有用。 如果我必须实施后台服务,或者有另一种实施带​​有通知的提醒的方法,请建议一些示例代码片段。 场景:我想通过通知显示提醒(时间/日期/重复 - Daily/Monthly 也将由用户决定)。 任何帮助都会得到帮助。 提前致谢。

您创建了意图,但通知显示在您的应用之外。要使 Intent 在您的应用之外起作用,您需要创建一个新的 PendingIntent。

PendingIntent 授予另一个应用程序或系统代表您的应用程序执行操作的权利。 PendingIntent 本身只是对系统维护的令牌的引用,描述了用于检索它的原始数据。这意味着,即使它所属的应用程序的进程被终止,PendingIntent 本身仍可从其他进程获得它。在这种情况下,系统将使用挂起的意图代表您打开应用程序,而不管定时器应用程序是否为 运行.

我建议在 CodeLab 下面进行 Walking Through 。太方便了。

https://developer.android.com/codelabs/advanced-android-kotlin-training-notifications#0

希望对您有所帮助。

好吧,在为上述问题苦苦挣扎之后,我自己找到了解决方案,我尝试为此启动后台服务,但在我从最近的应用程序中删除该应用程序后,系统也将其关闭,THE罪魁祸首是 电池优化设置 。在我从设置中删除电池优化设置后,闹钟就如我所愿地正常工作了:) 我发布这个答案是为了帮助其他人并节省他们的时间...... 编码愉快...