有時開發中有這樣的需求,每天幾點定時提醒,滿足條件警報等等,下面就來實現這個功能。
首先新建一個廣播接收者
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("--------收到提醒");
//TODO 實現功能
//重新計時第二天七點的
Intent i = new Intent(context, RemindService.class);
context.startService(i);
}
}
然後創建一個服務
public class RemindService extends Service {
int count = 0;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
Long secondsNextEarlyMorning = Utils.getSecondsNextEarlyMorning(8);
Intent i = new Intent(this, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, count++, i, PendingIntent.FLAG_UPDATE_CURRENT);
manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + secondsNextEarlyMorning, pi);
return super.onStartCommand(intent, flags, startId);
}
}
最後獲取當前時間到第二天幾點的時間差
public class Utils {
/**
* 獲取時間差
*/
public static Long getSecondsNextEarlyMorning(int num) {
Calendar cal = Calendar.getInstance();
if (cal.get(Calendar.HOUR_OF_DAY) - num >= 0) {
//如果當前時間大於等於8點 就計算第二天的8點的
cal.add(Calendar.DAY_OF_YEAR, 1);
} else {
cal.add(Calendar.DAY_OF_YEAR, 0);
}
cal.set(Calendar.HOUR_OF_DAY, num);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.MILLISECOND, 0);
Long seconds = (cal.getTimeInMillis() - System.currentTimeMillis());
return seconds.longValue();
}
}
就可以實現每天幾點定時任務。