Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android AlarmManager的使用

android AlarmManager的使用

編輯:關於Android編程


Android的鬧鐘實現機制很簡單, 只需要調用AlarmManager.Set()方法將鬧鐘設置提交給系統,當鬧鐘時間到後,系統會按照我們的設定發送指定的廣播消息,我們寫一個廣播去接收消息做相應處理即可。

第一步是設置鬧鐘:


private static String MY_ALARM_ACTION = "android.alarm.test.action";	
	/**
	 * 設置鬧鐘
	 * @param context 
	 * @param firstTriggerTimeMillis 首次觸發時間 (單位毫秒)
	 * @param periodTimeMillis 間隔時間
	 */
	private void setAlarmTime(Context context, long firstTriggerTimeMillis, long periodTimeMillis) {
		AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
		Intent intent = new Intent(MY_ALARM_ACTION);
		PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
		alarm.setRepeating(AlarmManager.RTC_WAKEUP, firstTriggerTimeMillis, periodTimeMillis, sender);
	}

第二步是寫一個接口器接收事件廣播:

	/**
	 * 鬧鐘接收
	 * @author Antony
	 * @date 2014-7-23
	 */
	public static class MyAlarmReceiver extends BroadcastReceiver {
	    public void onReceive(Context context, Intent intent) {
	        if (MY_ALARM_ACTION.equals(intent.getAction())) {
	        	Logcat.e("接收一次鬧鐘消息!");
			//TODO 在這裡寫相關處理
	        	return;
	        }
	    }
	}

當然Receiver是需要在Mainfest.xml中注冊的,我的注冊信息如下:

        
            
                
            
        

細心的可能會發現我的MyAlarmReceiver類是帶static關鍵詞的,還有我在注冊廣播時是加了"$"符號的。原因是醬紫的,為了代碼不至於看起來那麼凌亂,接收器是作為MyTest的內部類來寫的。如果BroadcastReceiver做為內部類來寫在Manifest中是不能直接用形如下面的方式來注冊的:

        
            
                
            
        


這樣會拋出找不到MyAlarmReceiver類的錯誤信息的。也就是說BroadcastReceiver想做為內部類來寫要加Static關鍵字,並且在注冊路徑要加$符號標識清楚內部類歸屬。

第三步就是再寫一個開機廣播接收器:

寫法與MyAlarmReceiver類似,可做為內部類也可單獨列為一個類來寫。在開機廣播接收器中調用設置鬧鐘的方法即可。

這樣每次手機重啟後又會重新設置鬧鐘,鬧鐘就不會出現中斷了。當然我這裡設置的是以固定時間間隔重復運行的鬧鐘,因需求而定了。

鬧鐘實現 原理就這些了,至於具體的界面顯示及提示方式等,每個人想法都有不同,就不再說了。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved