關於Android的鬧鐘

來源:互聯網
上載者:User

標籤:

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的鬧鐘

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.