AlarmManager.setExact() 不起作用

AlarmManager.setExact() does not work

我写了一个应用程序,可以根据特定时间设置闹钟。这些具体时间每天都在变化。例如,日出时间每天都在变化。所以,我定义了一个 main activity 负责每晚在 11:55 p.m 调用 setExact() 方法,然后它必须根据明天的具体时间设置明天的闹钟。问题是,它不起作用!当我设置闹钟时,它只工作一次,不会设置第二次。我真的需要帮助。谢谢 :)

public class MainPage extends AppCompatActivity {

private Calendar calendar = new GregorianCalendar();

protected GoogleApiClient client;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setMainAlarm();
  }
  private void setMainAlarm() {
    AlarmManager alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(".mainAlarmReciever");
    PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    Calendar alertCalendar = Calendar.getInstance();
    alertCalendar.set(Calendar.HOUR,23);
    alertCalendar.set(Calendar.MINUTE,54);
    alertCalendar.set(Calendar.SECOND,59);

    if (Build.VERSION.SDK_INT >= 23) {
        alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alertCalendar.getTimeInMillis(), alarmIntent);
    }else{
        alarmMgr.setExact(AlarmManager.RTC_WAKEUP, alertCalendar.getTimeInMillis(), alarmIntent);
    }

}

这是相关的接收器 class:

public class mainAlarmReciever extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    AlarmSetter.createOrUpdateAllAlarms(context);
    this.completeWakefulIntent(intent);
}

问题是您没有在 mainAlarmReciever 上设置明天的 mainAlarm。

想象一下,您今晚 mainAlarmReciever->onRecieve 运行 11:54:59 P.M。它可以执行您想执行的任何任务。您还应该在 onRecieve 函数中将明天的 mainAlarm 设置为 11:54:59 P.M。

另一种选择是使用 setRepeating(如 CommonsWare 所述,它在 API 19+ 之后并不准确)。