簡體   English   中英

在 android 啟動時重新啟用先前未在關機前通知的警報(非重復)

[英]Re-enable alarms (non-repeating) that were not previously notified before shutdown, on android boot

我是 Android 通知的新手,我有一個關於設備重啟后的問題,如何僅重新啟用那些在關機前未通知的警報。 舉個例子:

  • 僅 3 個警報,全部不重復。 第 1 天、第 2 天和第 3 天分別安排一個警報。
  • 這些警報的信息存儲在 Room 數據庫中。
  • 手機在第 1 天打開,警報 1 正常觸發(用戶在第 1 天沒有打開應用程序,因此只將通知視為彈出窗口)。 請注意,此警報是“事件”的一部分,並且該事件不會被刪除。
  • 電話在第 2 天完全關閉。
  • 手機在第 3 天開始時打開。預計第 2 天警報將在重新啟動時立即觸發,然后第 3 天警報將在預定時間觸發。

我從閱讀有關設置 BootReceiver / BroadcastReceiver 的理解是,一旦設備重新啟動,所有通知都會被取消,我需要在 BootReceiver 中重新啟用它們。 如何確保僅重新啟用第 2 天和第 3 天警報?

從概念上講,我在考慮 2 種可能性: 選項 1:每當出現警報通知時,無需打開應用程序,修改數據庫中的標志以指示警報已觸發。 然后在 BootReceiver 中,從數據庫中過濾活動警報以根據標志重新啟用。 這可能嗎? 彈出警報通知時需要對數據庫進行操作,甚至無需啟動應用程序。

選項 2:在 BootReceiver 中,從數據庫中篩選為“警報時間 > 上次關機時間”。 似乎有一種方法可以使用 Intent.ACTION_SHUTDOWN 將上次關閉時間存儲在 SharedPreferences 中,但我不確定這有多可靠,例如,如果設備意外關閉,保存是否會成功。

我不確定在這個用例中我是否走在正確的軌道上。 任何建議或代碼示例將不勝感激。

我得到了選項 1 的工作。 使用Google Codelab 示例,將存儲庫傳遞給 sendNotification function,並在末尾添加代碼以修改數據庫。

fun NotificationManager.sendNotification(messageBody: String, applicationContext: Context, repository: MyRepository) {
    ...
    notify(NOTIFICATION_ID, builder.build())
    val viewModelJob = Job()
    val uiScope = CoroutineScope(Dispatchers.Main + viewModelJob)

    uiScope.launch {
        withContext(Dispatchers.IO) {
            repository.updateNotificationStatus(id, true)
        }
        Timber.i("At the time when notification appears, database's status flag will change to true")
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM