繁体   English   中英

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)

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

您创建了意图,但通知显示在您的应用程序之外。 要使 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM