[英]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)
我见过各种各样的例子,但似乎没有一个对我有用。 如果我必须实现后台服务或者有另一种实现提醒的方法,那么请建议一些示例代码片段。 场景:我想通过通知显示提醒(时间/日期/重复-每日/每月也将由用户决定)。 任何帮助都会得到帮助。 提前致谢。
您创建了意图,但通知显示在您的应用程序之外。 要使 Intent 在您的应用之外工作,您需要创建一个新的 PendingIntent。
PendingIntent 授予另一个应用程序或系统代表您的应用程序执行操作的权利。 PendingIntent 本身只是对系统维护的令牌的引用,该令牌描述了用于检索它的原始数据。 这意味着,即使它拥有的应用程序的进程被杀死,PendingIntent 本身仍然可以从它被给予的其他进程中使用。 在这种情况下,无论计时器应用程序是否正在运行,系统都会使用挂起的意图代表您打开应用程序。
我建议在 CodeLab 下方穿行。 它太方便了。
https://developer.android.com/codelabs/advanced-android-kotlin-training-notifications#0
我希望它会有所帮助。
好的,在为上述问题苦苦挣扎之后,我自己找到了解决方案,我尝试启动后台服务,但在我从最近的应用程序中删除应用程序后,系统也将其关闭,主要罪魁祸首是电池优化设置。 在我从设置中删除电池优化设置后,警报就像我想要的那样正常工作:) 我发布了这个答案,以便它可以帮助其他人并节省他们的时间......快乐编码......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.