报警管理器延迟不工作
问题描述:
我使用下面的代码片段来使用AlarmManager延迟后调用一个操作。但是警报立即被调用。
AlarmUtility.java
public void setAlarm(Context context) {
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, 1000 *24*3600,
1000 *24*3600, pi); // Millisec * Second * Minute
} // trying to first trigger the alarm after 24 hrs and repeat after 24 hours
请让我知道什么是我的错误
答
1000 *24*3600
绝对是过去,因此,报警器会trigger immediately:
如果发生时间过去,立即触发报警 ,报警计数取决于过去有多远在触发时间内e与重复间隔有关。
而是获取当前时间再加入24小时的inital唤醒:
Calendar calendar = Calendar.getInstance();
calendar.add (Calendar.DATE,1);
long day = 1000 *24*3600;
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), day , pi);
答
ü应该使用这样的:
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time, time, pi);
,如果UR想用1000 *24*3600
,然后用(1000 *24*3600)L
。因为1000 *24*3600
大于Integer.Max_value
。
答
在第一次看这个问题似乎与
am.setRepeating(AlarmManager.RTC_WAKEUP, 1000 *24*3600,
1000 *24*3600, pi);
第二个参数triggerAtTime应指向一个时间,当报警应熄灭。它不应该是一个时间间隔。
检查下面的示例:
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000 *24*3600,
1000 *24*3600, pi);
雅权感谢ü – user2102570 2013-02-23 15:50:59