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 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
}
}
これは良い出発点であると思われます。私は 'BroadAlertReceiver'を拡張して' OnAlarmReceiver'クラスを実装しました。 3行目に放送されている意図を聞くために 'registerReceiver'をどこかに呼び出す必要がありますか? 'WakefulIntentService'のコードベースで' registerReceiver'を見つけることができず、混乱します。 –
@MikeC完全な例で答えを更新しました。また、マニフェストファイルでサービスと受信機を定義して、動作させる必要があります。 – Sharj
私は 'WakefulIntentService'を使用して終了しませんでしたが、私に正しい方向を教えてくれてありがとう。 –