您好,
我使用以下代码片段在使用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
请让我知道我的错误是什么
答案 0 :(得分:0)
1000 *24*3600
肯定是过去的,所以警报会trigger immediately:
如果过去发生时间,将触发警报 立即,报警数量取决于过去的距离 触发时间相对于重复间隔。
而是获取当前时间,然后为初始唤醒添加24小时:
Calendar calendar = Calendar.getInstance();
calendar.add (Calendar.DATE,1);
long day = 1000 *24*3600;
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), day , pi);
答案 1 :(得分:0)
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time, time, pi);
如果您想使用1000 *24*3600
,请使用(1000 *24*3600)L
。因为1000 *24*3600
大于Integer.Max_value
。
答案 2 :(得分:0)
初看时问题似乎与
有关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);