ボタンをクリックするだけで最初に開始されるIntentServiceがあります。
Intent intent = new Intent(this, ProximityService.class);
intent.putExtra("com.hybris.proxi.triggerTime", 5000l);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
long trigger = System.currentTimeMillis() + (5*1000);
alarmManager.set(AlarmManager.RTC_WAKEUP, trigger, pendingIntent);
これはうまく機能します。しかし、その後、intentservice内から同じintentserviceを再度実行しようとしています。ここでの考え方は、バッテリーを節約するために次の実行時間を変更できるということです。
@Override
protected void onHandleIntent(Intent intent) {
Log.d("demo", "ProximityService... STARTING");
Log.d("demo", "Intent has extra with key com.hybris.proxi.triggerTime" + intent.hasExtra("com.hybris.proxi.triggerTime"));
long lastTriggerTime = intent.getLongExtra("com.hybris.proxi.triggerTime", -1);
Log.d("demo", "Last trigger time: " + lastTriggerTime);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//trigger me again - TODO change this based on closeness to store
//TODO does not work, somehow triggertime is not incremented
if (lastTriggerTime < 50000)
{
long newTriggerTime = lastTriggerTime * 2;
Intent serviceIntent = new Intent(this, ProximityService.class);
serviceIntent.putExtra("com.hybris.proxi.triggerTime", (long)newTriggerTime);
Log.d("demo","New triggerTime set in new intent is : " + serviceIntent.getLongExtra("com.hybris.proxi.triggerTime", -1));
PendingIntent pendingIntent = PendingIntent.getService(this, 0, serviceIntent, 0);
long trigger = System.currentTimeMillis() + newTriggerTime;
alarmManager.set(AlarmManager.RTC_WAKEUP, trigger, pendingIntent);
Log.d("demo", "Alarm was set with trigger time " + newTriggerTime);
}
else {
Log.d("demo", "Not rescheduling alarm: lastTriggerTime is " + lastTriggerTime);
}
Log.d("demo", "ProximityService... DONE");
}
問題はそれです
intent.getLongExtra( "com.hybris.proxi.triggerTime"、-1);
常に初期値5000を返すため、次のアラームはトリガー時間の増加時にスケジュールされません。どういうわけか、新しいトリガー時間のインテントエクストラの設定は機能しません...
何か案は?