現在、アラームマネージャを作成して、指定された時間内にアラームをオフにすることを試みています。まず、私は、ユーザーがその日のために、そのために設定されたアラームがあったかどうかを確認します。毎日コードを実行するために定期的なAlarmManagerを設定する方法
それから私が行くと次の日の12と12:10の間でオフに行くために実際のアラームを設定します。
public static void setFutureAppointmentCheck(Context con) {
AlarmManager am = (AlarmManager) con
.getSystemService(Context.ALARM_SERVICE);
Date futureDate = new Date(new Date().getTime() + 86400000);
Random generator = new Random();
futureDate.setHours(0);
futureDate.setMinutes(generator.nextInt(10));
futureDate.setSeconds(0);
Intent intent = new Intent(con, FutureAppointmentReciever.class);
PendingIntent sender = PendingIntent.getBroadcast(con, 0, intent,
PendingIntent.FLAG_ONE_SHOT);
am.set(AlarmManager.RTC_WAKEUP, futureDate.getTime(), sender);
}
2分おきにオフになるテスト環境をセットアップしましたが、正常に動作しているようですが、実際のデバイスにデプロイすると、レシーバはアラームを受信していないようです。私はそれがデバイスが眠っている問題かもしれないと思ったので、パワーマネージャーを追加しました。しかし、それはまだ動作しません:
PowerManager pm = (PowerManager) context
.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, "keepAlive");
wl.acquire();
setFutureAppointments(context.getApplicationContext());
AppointmentManager.setFutureAppointmentCheck(context
.getApplicationContext());
User.setLongSetting(context.getApplicationContext(), "futureappts",
new Date().getTime());
wl.release();
を誰もが、私は露骨に間違ってやっているか、私は間違ってこれについてつもりです何を参照してください?すべての助けに感謝します。
Intent i = new Intent(this, MyService.class);
PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.cancel(pi); // cancel any existing alarms
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY,
AlarmManager.INTERVAL_DAY, pi);
この方法では、あなたのService
でAlarmManager
を再設定について心配する必要はありません。
後にアラームを撮影されます!通常、SetInexactRepeatingのオフセット量はどれくらいか分かりますか? – ninjasense
私の答えを編集して 'setInexactRepeating'問題について説明しました。 – Felix
を追加すると、新しい値を設定する前に取り消す代わりに、PendingIntent.FLAG_CANCEL_CURRENTを最後のパラメーターとして取り出すことができます。これは同じ効果があります。 – nsL