要解决“AlarmManager的setRepeating()在错误的时间触发”的问题,可以使用以下解决方法:
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, YourBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
// 设置初始触发时间
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
long initialTriggerTime = calendar.getTimeInMillis();
// 设置闹钟触发间隔
long interval = AlarmManager.INTERVAL_DAY;
// 设置精确触发时间
alarmManager.setExact(AlarmManager.RTC_WAKEUP, initialTriggerTime, pendingIntent);
// 在每次触发后设置下一次触发时间
alarmManager.setExact(AlarmManager.RTC_WAKEUP, initialTriggerTime + interval, pendingIntent);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, YourBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
// 设置初始触发时间
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
long initialTriggerTime = calendar.getTimeInMillis();
// 设置闹钟触发间隔
long interval = AlarmManager.INTERVAL_DAY;
// 设置不精确触发时间
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, initialTriggerTime, interval, pendingIntent);
以上两种方法可以根据具体需求选择适合的解决方案。