有没有办法每天 12 点唤醒我的 Android 应用程序来运行一些代码,例如在警报接收器中,但我的正好在 12 点运行晚了 10 分钟到几小时
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
if (Calendar.getInstance().after(calendar)) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 100, new Intent(context, MyReceiver.class), PendingIntent.FLAG_IMMUTABLE);
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
manager.cancel(pendingIntent);
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 86400000, pendingIntent);
有时运行得很好,但大多数情况下不是
您正在使用 setInexactRepeating() ,从它的名称来看,它是不精确的,因此系统可以延迟警报以实现精确的行为,您将必须使用 setAlamClock() ,并且每次它在 12 点触发时,您都必须安排另一个警报下一次,因为没有确切的重复,您还需要考虑诸如设备是否重新启动(所有警报将被取消)之类的事情,以便重新安排它们的接收器将完成这项工作。