Как выполнять задачу каждые 6 часов или когда сеть доступна для Android? - PullRequest
0 голосов
/ 23 декабря 2011

Ну, я хочу проверять версию сайта (эту часть я знаю, как) каждые 6 часов или около того.

Итак, я думал о создании service для этого и использовать AlarmManagerдля этого.

Так как мне нужен Интернет, чтобы проверить версию сайта, мне нужно кое-что посмотреть, включен ли интернет или посмотреть, когда он включен.По прошествии времени я


Итак, мои вопросы (да, не один!):

  1. Работает ли AlarmManager, даже если дисплей переходит в спящий режим?Когда устройство просыпается , оно знает, сколько времени прошло, и если прошло более 6 часов, оно выполняет задачу?
  2. Как проверить, доступен ли Интернет?
  3. Какузнать когда включен интернет?(что-то вроде broadcast?)
  4. Это хорошее решение?

Ответы [ 2 ]

3 голосов
/ 23 декабря 2011

Диспетчер аварий:

Диспетчер аварийных сигналов не имеет никакого отношения к состоянию дисплея, поэтому Да может работать, даже если экран выключен.

Фрагмент сетевой доступности:

public boolean isNetworkAvailable() {
  Context context = getApplicationContext();
  ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  if (connectivity == null) {
     boitealerte(this.getString(R.string.alert),"getSystemService rend null");
  } else {
     NetworkInfo[] info = connectivity.getAllNetworkInfo();
     if (info != null) {
        for (int i = 0; i < info.length; i++) {
           if (info[i].getState() == NetworkInfo.State.CONNECTED) {
              return true;
           }
        }
     }
  }
  return false;
}

Эта функция вернет значение true, если сеть доступна, и значение false, если это не так (режим полета, вне зоны досягаемости и т.

Не забудьте добавить разрешение в манифест

Возможное решение

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

public class ScreenReceiver extends BroadcastReceiver {

    public static boolean wasScreenOn = true;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            // do whatever you need to do here
            wasScreenOn = false;
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            // and do whatever you need to do here
            wasScreenOn = true;
        }
    }
}

В этом приемнике укажите логику для запроса, если сеть доступна ..

1 голос
/ 23 декабря 2011

О диспетчере аварий. Вот возможный код:

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis() + 10000, 6*60*60*1000, pendingIntent);

Первый параметр влияет на поведение устройства:

RTC - будильник не разбудит устройство; если он гаснет, когда устройство спит, он не будет доставлен до следующего пробуждения устройства

RTC_WAKEUP - разбудить устройство, когда оно выключается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...