Android:AlarmManager会在过去一段时间内触发

mic*_*119 2 android alarmmanager

这是我的警报管理器代码:

Intent intent=new Intent(getBaseContext(),AlarmReciever.class);
intent.setAction("com.example.projectx.ACTION");

PendingIntent pendingIntent=PendingIntent.getBroadcast(this,12345, intent,PendingIntent.FLAG_CANCEL_CURRENT);

AlarmManager alarmManager=(AlarmManager)getSystemService(Activity.ALARM_SERVICE);

alarmManager.set(AlarmManager.RTC_WAKEUP,targetCal.getTimeInMillis(),pendingIntent);
Run Code Online (Sandbox Code Playgroud)

如果我选择在未来一小时/分钟启动的警报,代码工作得很好.但是如果我选择过去的小时/分钟,当我点击"设置闹钟"时会立即激活.

例:

  • 现在是15:00,我将闹钟设置为15:45,闹钟在15:45关闭,一切正常

  • 现在是15:00,我将闹钟设置为14:30,一旦点击"设置闹钟",闹钟就会响起!

我的时间选择器总是设置为24小时模式.这可能是个问题吗?

谢谢!

Fan*_*mas 11

当然它确实......它意味着这样做.
Android认识到时间已经过去,所以它会触发警报,即使它已经很晚了.

您可以确保为警报设置的时间在当前时间之后.只需计算出这种差异:

int diff = Calendar.getInstance().getTimeInMilis() - targetCal.getTimeInMillis();
Run Code Online (Sandbox Code Playgroud)

如果diff大于0,则在日历中添加一天(targetCal)
现在,您的设备的时间将比下一个预定的闹钟时间更早(而不是更).