2015-11-10 4 views
5

Я хотел бы узнать, есть ли Android-антон для функции iOS BackgroundFetch.iOS эквивалент BackgroundFetch в Android

Я хочу, чтобы мое приложение Android использовало Кордову, чтобы просыпаться каждые 15 минут или около того, а также проверять наличие обновлений и выполнять другие другие задачи.

В iOS я смог сделать это, используя плагин cordova-background-fetch.

Поскольку Android-версия этого плагина отсутствует, я с удовольствием напишу его сам; но мне сначала хотелось бы узнать, как я буду реализовывать такую ​​функцию в Android. Какие-либо предложения?

ответ

1

В Android вы можете установить AlarmManger, чтобы просыпаться каждые X миллисекунд и запускать PendingIntent.

Этот код выглядит примерно так.

AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
Intent i=new Intent(context, OnAlarmReceiver.class); 
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0); 

mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
        SystemClock.elapsedRealtime()+60000, 
        PERIOD, 
        pi); 

по умолчанию Android, IntentService, который работает в фоновом режиме, имеет некоторые ограничения.

Вы также можете взглянуть на внешнюю библиотеку WakefulIntentService (https://github.com/commonsguy/cwac-wakeful). Я использую это вместе с AlarmManager для выполнения фоновых задач.

Обновлено:

OnAlarmReceiver класс

public class OnAlarmReceiver extends BroadcastReceiver { 

    public static String TAG = "OnAlarmReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "Waking up alarm"); 
     WakefulIntentService.sendWakefulWork(context, YourService.class); // do work in the service class 
    } 

} 

YourService класс

public class YourService extends WakefulIntentService { 

     public static String TAG = "YourService"; 

     public YourService() { 
      super("YourService"); 
     } 

     @Override 
     protected void doWakefulWork(Intent intent) { 
      Log.d(TAG, "Waking up service"); 

     // do your background task here 
     } 
} 
+0

Это, кажется, является хорошей отправной точкой. Я реализовал класс «OnAlarmReceiver», расширив «BroadcastReceiver». Нужно ли мне когда-нибудь вызывать 'registerReceiver', чтобы прослушать намерение, которое транслируется в третьей строке? Не удалось найти 'registerReceiver' в кодовой базе' WakefulIntentService', и я смущен. –

+0

@MikeC Я обновил ответ с полным примером. Вы также должны будете определить свой сервис и получатель в файле манифеста, чтобы он работал. – Sharj

+0

Я не закончил использование 'WakefulIntentService', но спасибо, что указал на правильное направление. –

Смежные вопросы