2015-11-10 6 views
5

iOS BackgroundFetchのAndroid機能があるかどうかを知りたいと思います。AndroidでのiOS BackgroundFetch

私のAndroidアプリがCordovaを使用して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には、いくつかの制限があります。

外部のlibary WakefulIntentServicehttps://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

これは良い出発点であると思われます。私は 'BroadAlertReceiver'を拡張して' OnAlarmReceiver'クラスを実装しました。 3行目に放送されている意図を聞くために 'registerReceiver'をどこかに呼び出す必要がありますか? 'WakefulIntentService'のコードベースで' registerReceiver'を見つけることができず、混乱します。 –

+0

@MikeC完全な例で答えを更新しました。また、マニフェストファイルでサービスと受信機を定義して、動作させる必要があります。 – Sharj

+0

私は 'WakefulIntentService'を使用して終了しませんでしたが、私に正しい方向を教えてくれてありがとう。 –

関連する問題