2

问题是我想延迟重复警报的第一次火灾。例如,我希望在点击 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 开发人员指南:triggerAtMillis 闹钟应首先响起的时间(以毫秒为单位),使用适当的时钟(取决于闹钟类型)。这是不准确的:在此时间之前警报不会触发,但在第一次调用警报之前可能会有几乎整个警报间隔的延迟。

我正在改变它,它总是在点击时开始并且没有延迟,有什么帮助吗?

4

3 回答 3

6

在此处查看 开发人员链接。第二个参数是 triggerAtMillis。它用作警报应该首先响起的时间(以毫秒为单位)

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

于 2012-10-23T12:52:21.983 回答
0

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

于 2012-10-23T11:56:41.177 回答
0

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

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

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

于 2016-05-26T21:01:22.787 回答