2013-02-23 137 views
0

嗨,报警管理器延迟不工作

我使用下面的代码片段来使用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

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); 
0

ü应该使用这样的:

am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time, time, pi); 

,如果UR想用1000 *24*3600,然后用(1000 *24*3600)L。因为1000 *24*3600大于Integer.Max_value

+0

雅权感谢ü – user2102570 2013-02-23 15:50:59

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);