android 實現每天7點到21點定時提示的功能
阿新 • • 發佈:2018-12-23
功能:實現每天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>