如何延迟重复报警的触发(开始时间)?

时间:2012-10-23 11:51:24

标签: java android android-service android-alarms android-pendingintent

问题是我想延迟重复警报的第一次火灾。 例如,我希望这个待处理的意图在点击10分钟之后不能立即工作,怎么做?

public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Main.this, ReportService.class);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar c = Calendar.getInstance();
PendingIntent pendingIntent = PendingIntent.getService(Main.this, 0, intent, 0);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 112500, pendingIntent);
}

此setInexactRepeating中的第二个参数名为triggerAtMillis 来自Android开发人员指南: triggerAtMill使用适当的时钟(取决于警报类型),警报首先应该以毫秒为单位的时间。这是不准确的:在此时间之前警报不会触发,但在第一次调用警报之前可能会有几乎整个警报间隔的延迟。

我改变了它,它总是从点击开始,没有任何延迟,任何帮助?

3 个答案:

答案 0 :(得分:6)

检查   developer link在这里。第二个参数是triggerAtMillis。它用作时间(以毫秒为单位)警报首先应该关闭

因此,在您的情况下,将额外的毫秒添加到c.getTimeInMillis(),之后您要首先运行待处理的意图。 :)

答案 1 :(得分:0)

检查handler.postDelayed函数,您可以在其中指定延迟

答案 2 :(得分:0)

如果使用ELAPSED_REALTIME时钟,请执行此操作

manager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime()+180000,
                180000,
                pendingIntent);

不要使用零或System.currentTimeMillis()作为ELAPSED时钟的偏移量。