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

时间:2016-05-25 10:16:31

标签: android alarmmanager

我正在使用Android AlarmManager,我在我的代码中发现了一个问题。警报管理器也会在不同的时间被调用,我找不到原因,我在上午7:10发出警报但每当我在不同的时间打开应用程序时就会调用它,如3:10下午4:30,等等。

MyCode:

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();

 } }

所以,这是上面的代码,请让我知道代码中的错误,并建议我解决一些问题。

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为警报是在过去设置的(当你在07:10 AM之后的任何时间设置它)所以,如果它已经过了今天上午07:10,你必须加1天。

说明 -

假设今天是上午8点而你正在为07:10设置闹钟,它会在07:10 AM的同一天设置闹钟已经过去,因此每当你打开应用程序时它就会熄灭

解决方案 -

选项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);

答案 1 :(得分:1)

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

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