17

アラームの結果として通知を起動するために使用される通知サービスを作成するために、すべてをうまく管理しました。残念ながら、AlarmManager を使用したアラームの設定は正しく機能しません。数分後に起動します (タイムゾーンの問題を示す正確な時間ではありません)。繰り返し期間は 1 週間なので、定数 INTERVAL_DAY を使用して 7 を掛けました。一方の PendingIntent が他方を置き換えないようにするために、dayOfWeek を 2 番目のパラメーターとして PendingIntent.getService() に渡します。ログを記録して、アラームが起動する時刻の正確さを確認します。

Log.d(TAG, "next alarm " + df.format(cal.getTime()));

設定されたすべてのアラームをリストする方法は本当にありませんか?少なくとも自分のアプリからのアラームは? これがエラーを追跡する唯一の方法だと思います。

私のコード:

cal.setTimeInMillis(System.currentTimeMillis());
cal.add(Calendar.DATE, 1);
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, minute);
Log.d(TAG, "next alarm " + df.format(cal.getTime()));
Intent showNotificationIntent = new Intent(context, NotificationService.class);
dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
alarmIntent = PendingIntent.getService(context, dayOfWeek, showNotificationIntent, 0);
getAlarmManager(context).setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
    INTERVAL_WEEK, alarmIntent);

毎日アラームを鳴らしたいのですが、ユーザーが設定できるさまざまな時間にアラームを鳴らしたいと思います。そのため、週に 1 回、最大 7 つのアラームを使用しています。

同様の質問に対する多数の回答を読んだ後でも(重複した質問を作成するつもりはありません)、問題を見つけることができませんでした。

4

2 に答える 2

27

19 未満の API レベルの場合は、使用する必要がAlarmManager.setRepeating()あり、アラームは指定された時間に正確にトリガーされます。API レベル 19 以降では、これは機能しなくなります。すべての繰り返しアラームが不正確になるように、Android に変更がありました。したがって、正確な繰り返しアラームを実現したい場合は、アラームをスケジュールしAlarmManager.setExact()てから、アラームトリガーが次の週に再度実行するなど、毎週行う必要があります。

于 2014-01-30T16:04:09.767 に答える