1時間ごと(午後1時、午後2時、午後3時など)に毎時の開始時にIntentServiceを開始することを検討しています。 。正確に時間の開始時にサービスを開始し、その後1時間ごとに繰り返す
ドキュメントを見て、私はこれを行うためにAlarmManagerを使うのがベストプラクティスだと考えています。
私は最初のインスタンス以下のアプリケーションを起動するBootReceiverを持っています。私のonHandleIntentでは、次のアラームはタスクが繰り返された後に設定されます。私の問題は、次の1時間のうちに警報を出すことができないということです。これについてどうすればいいですか?テストのために
私はあなたがRTC_WAKEUPを試してみましたアラームは
public class TimingAndControl extends IntentService
{ public TimingAndControl()
{
super(TimingAndControl.class.getSimpleName());
}
@Override
protected void onHandleIntent(Intent intent)
{
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "VibrateTag");
wakeLock.acquire();
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(300);
NextAlarm();
}
private void NextAlarm()
{
Intent intent = new Intent(this, this.getClass());
PendingIntent pendingIntent =
PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// The update frequency should often be user configurable. This is not.
long currentTimeMillis = System.currentTimeMillis();
long nextUpdateTimeMillis = currentTimeMillis + 3 * (60 * 1000);
Time nextUpdateTime = new Time();
nextUpdateTime.set(nextUpdateTimeMillis);
if (nextUpdateTime.hour < 6 || nextUpdateTime.hour >= 18)
{
nextUpdateTime.hour = 8;
nextUpdateTime.minute = 0;
nextUpdateTime.second = 0;
nextUpdateTimeMillis = nextUpdateTime.toMillis(false) + DateUtils.DAY_IN_MILLIS;
}
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, nextUpdateTimeMillis, pendingIntent);
}
@Override
public void onCreate(){
Toast.makeText(this, "service starting", (10 * 1000)).show();
super.onCreate();
}
@Override
public void onDestroy() {
Toast.makeText(this, "service stopping", (10 * 1000)).show();
super.onDestroy();
}
}
サービスは1時間ごとに正確に起動する必要があります。これを行うことで必要な精度を維持できますか?また、次のトップタイムがいつ計算されるのか、私は次のアラームを12:00 PMに設定し、そこからアラームを繰り返すことをお勧めしますか?申し訳ありませんが、AlarmManagerが – user1001160
@ user1001160で把握するのが非常に難しいと感じています:「RTC_WAKEUP」または「ELAPSED_REALTIME_WAKEUP」を使用すると、「これで必要な精度を維持できますか? '。つまり、AndroidはRTOSではなく、クロックドリフトなどです。「次のトップタイムがいつ計算されるのか - java.util.Calendar'を使用してください。これは普通のJava、何もありませんAndroid固有の"私は12:00 PMに次のアラームを設定し、そこからアラームを繰り返すことをお勧めしますか?" - 私はこのシナリオでは 'setRepeating()'を使っています。 – CommonsWare
偉大な、私はそれを考え出したと思います。あなたの助けに100万こんにちは! – user1001160