[英]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.