报警管理器不能以正确的时间触发

时间:2014-12-02 07:30:51

标签: android alarmmanager

我知道这是SO中最常见的帖子,但我没有找到任何答案。我想在特定时间触发动态广播接收器。为此我使用下面的代码

public void method1() {
    br = new BroadcastReceiver() {
        @Override
        public void onReceive(Context c, Intent i) {
            doTASK();
        }
    };
    registerReceiver(br, new IntentFilter("com.XXXX.wakeup"));
    pi = PendingIntent.getBroadcast(this, 0,
            new Intent("com.xxxx.wakeup"), 0);
    am = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));

    setAlarmManagerObject();
}

并且setAlarmManagerObject()方法在这里

   public void setAlarmManagerObject() {
    Calendar cal = Calendar.getInstance();
    int year = cal.get(Calendar.YEAR);
    int month = cal.get(Calendar.MONTH);
    int day = cal.get(Calendar.DAY_OF_MONTH);
    cal.set(year, month, day
            , com.XXXX.Constants.AlarmHour
            , com.xxxx.Constants.AlarmMinute
            , com.xxxx.AlarmSecond);

    am.setRepeating(AlarmManager.ELAPSED_REALTIME, cal.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, pi);
}

我的问题是,当我使用AlarmManager.RTC_WAKEUP时,它会在设备关闭时唤醒。我不想在我的应用中使用此属性。所以我使用了AlarmManager.ELAPSED_REALTIME,但是ELAPSED_REALTIME报警管理器没有触发。我希望我的警报管理器能够同时触发。如果设备关闭或睡眠状态,则警报管理器也会在设备唤醒后关闭。它应该在准确的时间触发。任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

您需要使用以下内容: -

 alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP (or AlarmManager.ELAPSED_REALTIME), 
 SystemClock.elapsedRealtime() + Constants.DELAY_IN_MILLIS, 
 pendingIntent);

您可以计算DELAY_IN_MILLIS,这是从当前系统时间开始的时间延迟(以毫秒为单位)。

对于重复闹钟,您可以使用以下代码: -

 alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
 SystemClock.elapsedRealtime() + Constants.DELAY_IN_MILLIS, 
 Constants.ONE_DAY_IN_MILLIS, 
 pendingIntent);