私は12時間ごとにチェックを実行し、それに応じて通知を行う必要があるアプリケーションを構築しています。通知のためのAlarmManagerを配置する場所
MainActivity(のonCreateメソッド内):このため、私は各12時間を繰り返し、条件が満たされた場合に通知を発射AlarmManagerを使用
//Set Notifications AlarmManager
AlarmManager AM = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent notificationIntent = new Intent (this, NotificationAlarmReceiver.class);
PendingIntent pending = PendingIntent.getBroadcast(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
cal.setTimeInMillis(cal.getTimeInMillis() + 5000); //5 Seconds from now
AM.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(), AlarmManager.INTERVAL_HALF_DAY , pending); //12 Hour Interval
通知が正しく機能していますしかし、ユーザがアプリケーションを開くたびにAlarmManagerがリセットされるため、onCreate
メソッドにAlarmManagerを置くことによって間違いを犯していると思います。しかし、主なアクティビティが開かれるたびに繰り返し作成されるのではなく、いつどこで作成されるのかは分かりません。
私は普段そうイベントでアラームを起動し、私は私がサービスを使用する方法がわからないてきたが、それはService
とは何かを持って感じているまだので、私はその
ようなものです。 – apelsoczi
はい、私はそう思っています。「AlarmManager」と通知についてのチュートリアルがたくさんあります。しかし、私はそのうちの1人がちょうど実際にコードを置く場所を言いたかったと思います。 –
また、AlarmManagerを使用する場合、デバイスがオフになるとPendingIntentsがクリアされることに注意してください。アラームをスケジューリングするタスクにはIntentServiceを使用します(まだサービスですが、より簡単です)。デバイスの再起動時にアラームの再スケジュールを行うには、BroadcastReceiverを使用してIntent.BOOT_COMPLETEDを待機する必要があります。このBroadcast Receiverを使用して、作成したIntentServiceを再スケジュールします。 – apelsoczi