问题是我想延迟重复警报的第一次火灾。 例如,我希望这个待处理的意图在点击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使用适当的时钟(取决于警报类型),警报首先应该以毫秒为单位的时间。这是不准确的:在此时间之前警报不会触发,但在第一次调用警报之前可能会有几乎整个警报间隔的延迟。
我改变了它,它总是从点击开始,没有任何延迟,任何帮助?
答案 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时钟的偏移量。