2012-05-02 97 views
3

我需要設置多個每週重複的鬧鐘,以便在用戶上某個課程(這是一個學術應用)時自動讓手機振動,然後在課程時重置音量飾面。使用Android跟蹤多個鬧鐘

我已經創建了警報,但如果用戶禁用此功能,我必須有一種方法來停用所有這些警報。我也知道我必須通過向AlarmManager.cancel()方法傳遞和使用相同的參數來實現,但問題在於:

用戶可以取消類並註冊類(但不直接在應用程序中),並且更新並反映在數據庫上,這隻保留了當前的類。所以如果我有一個不存在的類的警報設置,如果我不能複製PendingIntent,我該如何取消它?

我在這裏看到的一個解決方案是創建一個數據庫表來跟蹤當前的警報,然後我會完全控制它們,另一種方式是取消並重置所有警報時,類列表更新,但做所以需要相當長的時間,而第三但不太友好的選擇是簡單地等待用戶引導電話,並且當重置警報時只設置我需要的警報(如果我在這種引導行爲上錯誤)。我應該嘗試第四種選擇,還是其中一種足夠好?

回答

3

首先,您不需要設置多個警報。只需設置NEXT警報,然後當該警報觸發時,設置新的下一個警報。如果手機重新啓動,這也可以很容易地重新設置鬧鐘,因爲只有一個鬧鐘需要考慮。

我用這個小程序來設置我的鬧鐘。參數Set的值決定了警報是設置還是取消。

public static void SetMyAlarm(Context c, long AlarmTime, Boolean Set) { 
    Intent intent = new Intent(c, AlarmReceiver.class); // The broadcast receiver that will handle my alarm 

    int UniqueID =8192; // id for this specific alarm, use a different id for each separate alarm 

    PendingIntent sender = PendingIntent.getBroadcast(c, UniqueID, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager am = (AlarmManager) c.getSystemService(Context.ALARM_SERVICE); 
    if (Set) { 
     am.set(AlarmManager.RTC_WAKEUP, AlarmTime, sender); 
    } else { 
     am.cancel(sender); 
    } 
} 
+0

謝謝,這實際上是一個非常聰明的方式來做到這一點。通過這種方式,我可以使用SharedPreferences輕鬆跟蹤活動警報。我會在這裏嘗試這個 –

+0

不是迂腐,但方法簽名中的布爾值可以(應該?)是一個原語。沒有理由不這樣做。 –

+0

這實際上很迂腐,但是是應該的。我相信你會在這個網站上發現許多錯別字。四年前,我不認爲OP在意我在試圖幫助他時意外地輸入了大寫字母B. – Kuffs