Android:как повторить службу с помощью AlarmManager каждые 15 минут, но только с 8:00 утра до 18: 00 вечера?

Мне нужно проверить обновление данных periodly, но данные обновляются только в дневное время, поэтому я хочу, чтобы это повторяющееся действие выполнялось только в этом разделе времени для экономии батареи и полосы пропускания.

Что делать?

2 ответов


если служба разговаривает с облаком с HTTP get/post / любыми запросами, то обратите внимание, что C2DM решение позволит увеличить срок службы батареи, и это SyncAdapter решение может обеспечить несколько преимуществ. (Я рекомендую смотреть видео ввода-вывода Google по обеим темам.)

следующий код делает что-то близкое к тому, о чем вы изначально спрашивали.

public class MyUpdateService extends IntentService
{
  public MyUpdateService()
  {
    super(MyUpdateService.class.getSimpleName());
  }

  @Override
  protected void onHandleIntent(Intent intent)
  {
    // Do useful things.

    // After doing useful things...
    scheduleNextUpdate();
  }

  private void scheduleNextUpdate()
  {
    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 + 15 * DateUtils.MINUTE_IN_MILLIS;
    Time nextUpdateTime = new Time();
    nextUpdateTime.set(nextUpdateTimeMillis);

    if (nextUpdateTime.hour < 8 || 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);
  }
}

следуйте этим простым шагам, чтобы сохранить servce навсегда в android-устройстве. 1. Вызов службы с помощью Alarm manager каждые 15 минут. 2. возврат START_STICKY в методе onStart. 3. В on destroy вызовите Alarm manager и перезапустите службу с помощью метод startService. 4.(Необязательно)Повторите пункт 3 в методе onTaskRemoved.