標籤:
Android的鬧鐘依賴兩個組件。一個是AlarmManager一個是Calendar。
先說Calendar,Calendar是一個非常方便的時間日期管理容易,它存放了日期時間資訊,並且可以以各種體位set和get。
Calendar的使用可以分為以下幾步
1、獲得Calendar執行個體
Calendar calendar = Calendar.getInstance();
2、設定或者獲得日期+時間
calendar.set(Calendar.HOUR_OF_DAY,3); calendar.set(Calendar.YEAR,3); int minute = calendar.get(Calendar.MINUTE); int month = calendar.get(Calendar.MONTH)+1;
值得注意的是,在Calendar中get的MONTH是需要+1的。
總之你通過這個得到了一個日期+時間的資料了,現在,你要用這個資料開始設定鬧鐘。
首先,我們可以想象,在鬧鐘時間到時,一定有一個動作。開發人員通過這個動作,為鬧鐘響應設計行為(如開啟螢幕,響起煩人的起床音樂等等)。所以我們似乎需要一個Intent。這個Intent可以開啟Activity,開啟Service或者發個廣播。但是,這還不夠。因為開發人員實際上不知道這個Intent何時會發動,這完全取決於使用者。因此我們需要一個PendingIntent對Intent進行封裝。假設我在A.activity中設定鬧鐘,希望在鬧鐘響起時開啟B.activity。我可以進行如下設定:
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); Intent intent = new Intent(A.this,B.class); PendingIntent pendingIntent = PendingIntent.getActivity(A.this , id , intent , 0); alarmManager.set(AlarmManager.RTC_WAKEUP , calendar.getTimeInMillis() , pendingIntent);
其中RTC_WAKEUP這個鬧鐘類型,表示鬧鐘即使在手機休眠情況下依然會喚醒手機。calendar.getTimeInMillis()即是使用者佈建的鬧鐘時間。pendingIntent即是開發人員為鬧鐘設計的喚醒後的動作,本例為開啟B.activity。
其中PendingIntent的設定中的id非常令人在意。有些教程將它直接設為0,似乎鬧鐘也能正常工作。
其實不然!通過查閱資料瞭解,如果將id直接設為0,鬧鐘將只能設定一個,後面設定的鬧鐘將覆蓋前面設定的鬧鐘。因此,開發人員在設計鬧鐘時,一定要給每個鬧鐘設定一個id用以區別它們,否則將會引起PendingIntent的覆蓋問題。
以上~
關於Android的鬧鐘