背景: 我有一个在 Android 7.1 上运行的 Android 应用程序。使用 AlarmManage 设置重复任务,以便每天在特定时间执行任务。代码如下:
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
long startInMs = getComing9AM();
Intent intent = ...; //an intent to be run when alarm time is up.
PendingIntent ScheduledIntent = PendingIntent.getBroadcast(context, id, intent, 0);
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, startInMs, ScheduledIntent);
private long getComing9AM(){
long now = System.currentTimeMillis();
long today = getToday9AM();
return (now < today? today:getTomorrow9AM());
}
private long getToday9AM(){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
return calendar.getTimeInMillis();
}
private long getTomorrow9AM(){
return …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,用户加入计划,然后第二天中午会有一个警报通知.这是我的代码:
首先,我在AlarmManager中设置一个警报,如下所示:
//set alarm to the next day 12:00 noon of the join date
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
alarm_date = format.parse(join_date);
} catch (ParseException e) {
e.printStackTrace();
}
GregorianCalendar calender = new GregorianCalendar();
calender.setTime(alarm_date);
calender.add(Calendar.DATE, 1);
calender.add(Calendar.HOUR_OF_DAY, 12);
//calender.add(Calendar.HOUR_OF_DAY, 14); //temp testing data
//calender.add(Calendar.MINUTE, 43);
AlarmManager am = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(ctx, AlarmReceiver.class);
am.set(AlarmManager.RTC_WAKEUP, calender.getTimeInMillis(), PendingIntent.getBroadcast(ctx, 1, i, PendingIntent.FLAG_UPDATE_CURRENT));
Run Code Online (Sandbox Code Playgroud)
然后,在预定的时间,它会触发接收器,如下所示:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) { …Run Code Online (Sandbox Code Playgroud)