2010-08-15 108 views
3

我有一個新的地震通知android應用程序,它是它的初始版本。目前我有一個問題。我的應用程序有一個在後臺運行的服務,它計劃自己運行每個X週期。要安排自己,它需要至少運行一次。目前發生在您啓動手機時。很明顯,我不希望用戶在安裝應用程序後重新啓動手機。運行Android應用程序的代碼

另外我不想要的是讓我的應用程序UI在每次運行時調用它。因爲這會明顯影響用戶的日程安排。我需要知道,無論是當我的UI應用程序第一次在手機上運行時,它都應該能夠運行該服務,以便它能夠自行調度並在未來繼續按預期運行。

,我可以解決這個問題另一種方法是,如果我知道現有的警報列表來喚醒服務,那麼我會知道,如果一個應用程序已經在運行與否。

如果您想查看應用源代碼或運行二進制文件;請看下面的github url

我希望我在我的意圖明確。只是爲了給一些應用程序的背景;這是一款android手機的通知應用程序,可在發生地震時生成通知,並在地圖上顯示受影響的區域並提供附加功能。 它有一個UI應用程序,顯示過去的地震列表。還有一項監視新功能的服務。

在此先感謝。

回答

2

我不在家,所以這將是簡短的,直到我可以編輯填寫。

首先,我想你可以設置一個BroadcastReceiver通知你的包安裝的初始設置。

要檢測,如果你已經提交了警報,嘗試檢索的PendingIntent與FLAG_NO_CREATE報警。如果你得到一個空值,你需要設置警報,否則它可能是好的。

+0

完美。我應該自己想想。 PendingIntent.getBroadcast就是我想要的! :) – Priyank 2010-08-15 17:54:06

1

請注意,對startService()的調用不是嵌套:無論您調用startService()多少次,如果此服務尚未運行,它將被實例化並啓動(如果需要,將爲其創建一個進程);如果它正在運行,那麼它仍然在運行。

對此方法的每個調用都將導致相應的調用目標服務的onStart(Intent,int)方法,其意圖在此給出。

你可以輕鬆擁有一個布爾標誌在你的服務是這樣的:isScheduled,你可以覈對時間表或不是你的重複任務,當您收到的事件。

最後,如果你需要運行所有的時間服務,你應該開始它在Application類,無論多少次。你在服務的方法onStart做了區別。

相關問題