2010-01-27 138 views
4

我通過AlarmManager設置了一些警報來執行一些週期性作業。 我在每次boot_complete事件中第一次打開應用程序&時設置/重置它們。 但是,當通過ADB重新安裝應用程序時,我的鬧鐘不再閃光。看起來像操作系統刪除重新安裝應用程序的報警。我假設如果用戶也從市場上更新應用程序,就會發生這種情況。更新/重新安裝應用程序時執行代碼

如果在我的應用程序重新安裝/升級等情況下,我可以收到廣播或某種回叫,我可以重新設置鬧鐘。但我不知道這是可能的還是如何? 有人可以幫我一把。

回答

5

是的,這是可能的。

您可以創建監聽任何PACKAGE_*事件系統發送一個廣播接收器,但您將不會收到他們自己的應用程序除非你的應用程序正在升級—你會得到PACKAGE_REMOVED不久之後PACKAGE_REPLACED

+0

謝謝,我會盡力處理這些事件,看看它是否適合我。但我仍然不同意這種默認行爲。爲什麼當升級/重新安裝應用程序時,像prefs&sqlite db這樣的其他數據得到維護(即使有數據庫升級的機會),警報也會被移除。這隻會增加程序員不必要的開銷。 – Rahul 2010-01-28 16:31:44

+0

數據庫升級不會在應用程序升級時發生。無論如何,你可以在Android項目上提出一個錯誤,讓他們知道你認爲在更換包裝時應該保留警報。我無法立即想到任何明顯的原因,因爲即使升級後無法解決報警中的PendingIntent,系統也可能忽略它。 – 2010-01-28 17:14:01

+1

我有完全相同的問題。當替換通過市場(或某種其他機制)發生時,PACKAGE_REPLACED意圖可能會觸發,但AFAICS在替換通過ADB發生時不會觸發;我看到PACKAGE_REMOVED和PACKAGE_ADDED事件,兩者都不能被包自己捕獲(根據文檔)。 – sosiouxme 2010-12-19 17:17:37

相關問題