Как я могу разбудить мое приложение для Android через определенные регулярные промежутки времени?
Я собираюсь создать приложение, которое будет отслеживать движение моего телефона Android каждые несколько минут и отправлять его на мой сервер. Я много читал в Интернете о том, как это сделать с помощью службы AlarmManager и Partial_WakeLock. Я также просмотрел примеры использования comonsware на github.com, но я был немного смущен, потому что у меня все еще нет опыта работы с android.
Я успешно получил свое приложение, чтобы [получить местоположение и отправить его на мой сервер]. Как мне каждые несколько минут запускать службу и выполнять [упомянутую работу]? В примере Wakeful в commonsware, в каком методе я упоминаю свою [работу] и в каком методе я продолжаю вызывать его?
2 ответа
Тебе необходимо Service
и AlarmManager
, Ваша служба будет обрабатывать получение позиции и отправку ее на сервер и AlarmManager
будет вызывать ваш сервис в течение заданного вами интервала. Вы должны инициализировать ваш AlarmManager с вашим Service
примерно так в onCreate
или другое место, которое вы хотите:
AlarmManager alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(this, YourAlarmReceiver.class),PendingIntent.FLAG_CANCEL_CURRENT);
// Use inexact repeating which is easier on battery (system can phase events and not wake at exact times)
alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, YOUR_ALARM_TRIGGER_AT_TIME,YOUR_ALARM_INTERVAL, pendingIntent);
YourAlarmReceiver собирается запустить ваш сервис
public class YourAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, YourService.class));
}
}
О том, как пользоваться Сервисами, можно узнать на сайте Android http://developer.android.com/guide/topics/fundamentals/services.html
Вы могли бы использовать частичный wakeLock с sleep(X), который, когда sleep(x) разрешен, система вызовет следующую строку кода, но проблема в том, что я вижу возможный бесконечный цикл, который может потребовать действия по уничтожению задачи, или просто сбой системы.