Android alarmmanger 在不同的时间被调用?

Android alarmmanger gets called in different time?

我正在研究 Android AlarmManager,我在我的代码中发现了一个问题。警报管理器也在不同的时间被调用,我不知道是什么原因,我在 7:10 AM 发出警报但是每当我在 3:10 PM 等不同时间打开应用程序时它都会被调用, 4:30 PM等

我的代码:

public void setAlarm(){

      Calendar calendar = Calendar.getInstance();
      calendar.setTimeInMillis(System.currentTimeMillis());
      calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
      calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
      calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1);
      calendar.set(Calendar.HOUR_OF_DAY, 7);
      calendar.set(Calendar.MINUTE, 10);
      calendar.set(Calendar.AM_PM,Calendar.AM);

    Intent intent = new Intent(appContext, MyAlarmManager.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(appContext, 0, intent, 0);

    AlarmManager alarmManager = (AlarmManager) appContext.getSystemService(Context.ALARM_SERVICE);
    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),  AlarmManager.INTERVAL_DAY, pendingIntent);
}

MyAlarmManager.java

public class MyAlarmManagerextends BroadcastReceiver {

@Override
public void onReceive(final Context context, Intent intent) {

    setAlarm();

 } }

所以,这是上面的代码,请让我知道代码中有什么问题并建议我一些解决方案。

发生这种情况是因为闹钟是在过去设置的(当您在 07:10 AM 之后的任何时间设置它时)因此,如果今天已经过了 07:10 AM,您必须添加 1 天。

解释-

假设今天是早上 8 点,您要为 07:10 设置闹钟,它会在同一天设置闹钟 07:10 上午,这已经过去了,因此只要您打开它就会响起应用

解-

选项 1 - 要么设置日期、月份和年份太像 -

calendar.set(Calendar.DATE, date);
calendar.set(Calendar.MONTH, month);

选项 2 - 检查当前时间,如果当前时间 > 闹钟时间,则在闹钟上加一天

//If you are past 07:10 AM then 
    calendar.add(Calendar.DATE,1);

如果您使用的是 Android 版本的 Marshmallow 或更高版本,则可能会发生这种情况。它被称为 打瞌睡模式

打瞌睡模式通过延迟 AlarmManagerSyncAdapterJobScheduler 等内容来节省电池电量。请参阅 this link 以了解有关打瞌睡模式的更多信息