当应用程序从最近的应用程序中终止时,Android报警管理器不工作



我在应用程序中被Reminders卡住了。当我的应用程序正在运行或处于后台(最近的应用程序(时,带有报警管理器的提醒程序运行良好,但主要问题是,当我终止应用程序时,不会触发报警。我是否应该实现任何后台服务来保持我的警报有效,即使应用程序被终止?我的Menifest代码:

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

我的接收器类别:

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)

我见过各种各样的例子,但似乎没有一个对我有用。如果我必须实现后台服务,或者有另一种通过通知实现提醒的方法,那么请建议一些示例代码片段。场景:我想用通知显示提醒(时间/日期/重复-每日/每月也将由用户决定(。任何帮助都会显现出来。提前谢谢。

您创建了意向,但通知显示在应用程序外部。要使意向在应用程序之外发挥作用,您需要创建一个新的PendingIntent。

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

我建议在CodeLab下面浏览。它太方便了。

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

我希望它会有所帮助。

好吧,在解决了上述问题之后,我自己找到了解决方案,我尝试启动相同的后台服务,但在我从最近的应用程序中删除该应用程序后,系统也将其关闭,主要问题是电池优化设置。在我从设置中删除了电池优化设置后,警报按照我的意愿正常工作:(我发布这个答案是为了帮助其他人,节省他们的时间。。。快乐编码。。。

最新更新