簡體   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