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 の 2 番目のパラメータは、triggerAtMillis と呼ばれます。これは不正確です。アラームはこの時間より前には起動しませんが、アラームが最初に呼び出される前に、ほぼすべてのアラーム間隔の遅延が発生する可能性があります。

私はそれを変更していますが、常にクリックすると開始され、遅延はありません。

4

3 に答える 3

0

ELAPSED_REALTIME クロックを使用している場合は、これを行います

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

ELAPSED クロックのオフセットとしてゼロまたは System.currentTimeMillis() を使用しないでください。

于 2016-05-26T21:01:22.787 に答える