1. 程式人生 > >android 實現每天7點到21點定時提示的功能

android 實現每天7點到21點定時提示的功能

功能:實現每天7點到21點定時提示的功能

實現思路:通過AlarmManage設定時間,然後在該時間到來時,AlarmManager傳送廣播,在自定義的廣播接收器中進行提示

碰到的問題 ①:後面的定時器會將前面的定時器"覆蓋"掉,只會啟動最後一個定時器

                     ②:如果設定一個過去的時間,鬧鐘立即被觸發

問題①解決方法:

PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags);

第二個引數requestCode一定要是唯一的,比如不同的ID之類的(如果系統需要多個定時器的話),而剛開始自己程式碼 PendingIntent.getBroadcast(

MainActivity.this, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT) requestCode設定成0了,導致只會啟動最後一個定時器

問題②解決方法:

增加判斷:
if(當前時間>你想設定的時間)

 把當前日期加1天.

<span style="color:#333333;">				AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
				for (int i = 7; i <= 21; i++) {
					Intent intent = new Intent(MainActivity.this,
							AlarmReceiver.class);
					intent.setAction("action");
					PendingIntent pendingIntent = PendingIntent.getBroadcast(
							MainActivity.this, </span><span style="color:#ff0000;">i</span><span style="color:#333333;">, intent,
							PendingIntent.FLAG_CANCEL_CURRENT);
					Calendar calendar = Calendar.getInstance();
					long currentTime = calendar.getTimeInMillis();// 獲取當前時間
					calendar.set(calendar.HOUR_OF_DAY, i);
					calendar.set(calendar.MINUTE, 0);
					calendar.set(calendar.SECOND, 0);

					/**
					 * 當前時間大於設定的時間,將設定的時間增加一天
					 */
					</span><span style="color:#ff0000;">if (currentTime > calendar.getTimeInMillis()) {
						calendar.add(Calendar.DATE, 1);
					}</span><span style="color:#333333;">

					alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
							calendar.getTimeInMillis(), 1000 * 60 * 60 * 24,
							pendingIntent);
				}
			</span>