私のアプリでは、AlarmManager
を使用して、毎週特定の時間にサービスを開始しています。しかし、別の7日間を待つ代わりに、次の日にサービスに電話する必要がある場合もあります。そのため、私はアラームを再設定するのではなく、起動したサービスで新しいAlarmを作成して特定の日付に設定しています。このようなもの:AlarmManagerによって開始されたサービスから新しいアラームを開始
public class AlarmService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//do something
//setting new alarm
AlarmManager alarmMng = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(this,AlarmService.class);
PendingIntent alarmIntent = PendingIntent.getService(this, 0, i, 0);
Calendar c = Calendar.getInstance();
if(something) alarmMng.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis()+1000*60*60*24,alarmIntent);
else alarmMng.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis()+1000*60*60*24*7,alarmIntent);
return START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
これはうまくいく方法ですか?ちょうど呼び出されたサービスから新しいアラームを作成するのは良い考えですか?それは悪いプログラミングの練習とみなされますか?もしそうなら、どうすればそれを扱うべきですか?
よく「do something」がほとんど通知を表示しています – matip
私の回答を編集しました。それが役に立てば幸い。 – Jim
彼は警報そのものでサービスをスケジュールすることを意味すると思う。そのアラームはサービスを開始し、アラーム自体がサービス内で初期化されます。 –