AlarmManager.setExact()不起作用

时间:2016-12-01 17:27:47

标签: android alarmmanager

我编写了一个能够根据特定时间设置警报的应用程序。这些特定时间每天都在变化。例如,日出时间每天都在变化。因此,我定义了一个主要活动,它负责每晚11点55分调用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);
    }

}

这是相关的接收器类:

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

1 个答案:

答案 0 :(得分:1)

问题是你没有在mainAlarmReciever上为明天设置mainAlarm。

想象一下你的mainAlarmReciever->onRecieve今晚在下午11:54:59举行。它可以完成你想做的任何任务。您还应该在onRecieve函数的下午11:54:59 P.M为明天设置mainAlarm。

另一种选择是使用setRepeating(因为CommonsWare在API 19 +之后提到它并不完全)。