1. 程式人生 > >【AlarmManager】使用AlarmManager定時任務

【AlarmManager】使用AlarmManager定時任務

下面的程式碼是使用Android AlarmManager類可以完成定時執行任務的樣例程式碼。

首先建立Intent和日曆(Calendar)物件,然後使用AlarmManager去執行這個intent。


程式碼:
new Intent(getBaseContext(), some_service.class);
PendingIntent pendingIntent = PendingIntent
.getService(getBaseContext(), 0, intent, 0);

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

// 取消以前同類型的提醒
alarmManager.cancel(pendingIntent);

Calendar calendar = Calendar.getInstance();
Calendar currentDate = Calendar.getInstance();

calendar.add(Calendar.HOUR, 24);
calendar.set(Calendar.HOUR_OF_DAY, 07);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 00);

// 設定每天在指定的時間執行alert,注有RTC和RTC_WAKE後者在睡眠時也能執行

alarmManager.setRepeating(AlarmManager.RTC,calendar.getTimeInMillis(),

AlarmManager.INTERVAL_DAY, pendingIntent);

以下是兩個採用AlarmManager定時任務的例項PushService.class是一個自己實現的處理服務替換成自己的一個就可以

	/** 使用AlarmService獲取推送資訊 */
	public static void startAlarmPush(Context context, long intervalMillis) {
		AlarmManager am = (AlarmManager) context
				.getSystemService(Service.ALARM_SERVICE);
		Intent intent = new Intent(context, PushService.class);
		PendingIntent p_intent = PendingIntent.getService(context, 1, intent,
				PendingIntent.FLAG_UPDATE_CURRENT);
		am.setRepeating(AlarmManager.RTC_WAKEUP, 0, intervalMillis, p_intent);
	}

	/** 停止獲取推送資訊的AlarmService */
	public static void stopAlarmPush(Context context) {
		AlarmManager am = (AlarmManager) context
				.getSystemService(Service.ALARM_SERVICE);
		Intent intent = new Intent(context, PushService.class);
		PendingIntent p_intent = PendingIntent.getService(context, 1, intent,
				PendingIntent.FLAG_UPDATE_CURRENT);
		am.cancel(p_intent);
	}

原始碼下載: