我知道这是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报警管理器没有触发。我希望我的警报管理器能够同时触发。如果设备关闭或睡眠状态,则警报管理器也会在设备唤醒后关闭。它应该在准确的时间触发。任何帮助都会非常感激。
答案 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);