Android:如何使用 AlarmManager 每 15 分钟重复一次服务,但只在上午 8:00 到晚上 18:00 运行? [英] Android: How to repeat a service with AlarmManager every 15 minutes, but only run from 8:00AM to 18:00PM?

查看:16
本文介绍了Android:如何使用 AlarmManager 每 15 分钟重复一次服务,但只在上午 8:00 到晚上 18:00 运行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要定期检查数据更新,但数据只在白天更新,所以我希望这个重复动作只在那个时间段运行,以节省电池和带宽.

I need to check data update periodly, but the data is only updating during the daytime, so I want this repeating action run only in that time section for saving battery and bandwidth.

我该怎么办?

推荐答案

如果服务通过 HTTP get/post/whatever 请求与云通信,那么请注意 C2DM 解决方案将延长电池寿命,并且 SyncAdapter 解决方案可以提供一些好处.(我建议您观看有关这两个主题的 Google I/O 视频.)

If the service is talking to the cloud with HTTP get/post/whatever requests, then note that a C2DM solution would net better battery life, and that a SyncAdapter solution could provide a few benefits. (I recommend watching the Google I/O videos on both topics.)

以下代码与您最初询问的内容接近.

The following code does something close to what you originally asked about.

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);
  }
}

这篇关于Android:如何使用 AlarmManager 每 15 分钟重复一次服务,但只在上午 8:00 到晚上 18:00 运行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆