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

请让我知道我的错误是什么

4

3 回答 3

0

你应该这样使用:

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

如果您想使用1000 *24*3600,请使用(1000 *24*3600)L。因为1000 *24*3600大于Integer.Max_value

于 2013-02-23T15:48:10.687 回答
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); 
于 2013-02-23T15:48:12.137 回答
0

1000 *24*3600肯定是过去了,所以警报会立即触发

如果时间发生在过去,将立即触发警报,警报计数取决于触发时间相对于重复间隔过去多长时间。

取而代之的是获取当前时间,然后为初始唤醒添加 24 小时:

Calendar calendar =  Calendar.getInstance();
calendar.add (Calendar.DATE,1);
long day = 1000 *24*3600;

am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), day , pi);
于 2013-02-23T15:44:41.430 回答