首先,關於如何訪問以前創建的報警一個小教程:
您可以通過唯一的ID,如創建每個警報區分:
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
當你想訪問這個警報,你必須使用相同的唯一ID創建相同的PendingIntent。例如,以下內容只會訪問您使用PendingIntent id 1234創建的警報。然後,它將取消前一個並重置它。
Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, triggerAtMillis ,pi);
這個想法很簡單。跟蹤該ID,然後使用它們訪問各自的警報。如果您使用相同的ID創建多個警報,則最近的警報將取消之前的警報。
即將到來的主要問題,而不是每次啓動應用程序時檢查您的鬧鐘是否處於活動狀態,只需在您的活動的onCreate()
方法中重新設置即可。與我上面描述的PendingIntent相同。這樣可以節省檢查警報是否預先設置的麻煩。由於您的目標是保持警報活躍,因此每次啓動應用程序時都不會因爲覆蓋之前設置的警報而受傷。只要確保你使用相同的ID來創建你的PendingIntent。
不要忘記檢查鬧鐘的時間是否已經過去,以避免嘗試設置過去一段時間的鬧鐘,這會立即觸發鬧鐘。
讓我們考慮另一種情況:當您關閉設備時,所有鬧鐘都將被取消。這讓你別無選擇,只能在重新啓動時重新設置它們。要做到這一點,你將不得不使用BroadcastReceiver。
This answer將幫助你如何做到這一點。如上所述,只需在BroadcastReceiver的onReceive()方法中重新創建鬧鐘即可。
嗨感謝工作場所......但是,如果我沒有活動的情況下會是什麼..然後我的啓動完成廣播接收機不會在這種情況下工作(情況與Android版本3.0以上)...所以如何拿出它..因爲我正在這樣一個應用程序,他們不想要任何活動...所以如何註冊該接收器.. – NullPointerException
您只需使用標籤。看看這個:http://developer.android.com/guide/topics/manifest/receiver-element.html。如果您使用服務創建鬧鐘,則需要將上面的活動名稱更改爲您的服務類名稱。 –
Erol
好吧!這一個是我得到的最好的答案,所以我獎勵它! – NullPointerException