0

AsyncTaskを使用してサービスをポーリングするスタンドアロンアプリケーションとして現在実行されているアプリケーションを構築しています。ポーリングを、開始時に実行され、変更についてユーザーに通知する可能性のあるAndroidサービスに移動したいと思います。カーブボールは、このデータをアクティビティ間(および間もなくサービス)で共有する必要があるため、永続ストレージとメモリ内ストレージの間でバッテリーを消費しません。

バックグラウンドで実行され、AlarmManagerを使用して30分ごとにポーリングし、サービスが作成する通知をクリックするか、ランチャー自体を介して起動できるユーザーインターフェイスと(定数を介して)データを共有するサービスを作成する方法はありますか?

今、これは私がどこまで到達したかです:

サービスは次のとおりです。

public class PollService extends Service {
    private final IBinder binder = new PollBinder();

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        SharedData.update();

        return Service.START_NOT_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return binder;
    }

    public class PollBinder extends Binder {
        PollService getService() {
            return PollService.this;
        }
    }
}

これにより、サービスがトリガーされます...

public class PollScheduleReceiver extends RoboBroadcastReceiver {
    private static final int POLL_FREQ_SEC = 30;
    @Override
    protected void handleReceive(Context context, Intent intent) {
        Intent schedulerIntent = new Intent(context, PollStartReceiver.class);
        PendingIntent pendingSchedulerIntent = PendingIntent.getBroadcast(context, 0, schedulerIntent, PendingIntent.FLAG_CANCEL_CURRENT);
        calendar.add(Calendar.SECOND, POLL_FREQ_SEC);
        alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), POLL_FREQ_SEC * 1000, pendingSchedulerIntent);
    }
}

これにより、起動時にトリガーがトリガーされます。

public class PollStartReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent pollService = new Intent(context, PollService.class);
        context.startService(pollService);
    }
}
4

1 に答える 1

0

あなたの質問を受け取ったかどうかはわかりませんが、私が得た限りでは、いくつかの手順で行うことができます..

1) バックグラウンドで実行されるようにサービスを開始します

2) AsyncTask または Handler を使用して、必要に応じて 30 秒ごとにそのサービスでポーリングを行うことができます

3) そして、条件が満たされた場合、そのサービスから目的のアクティビティを開始します。

于 2012-09-28T06:12:15.593 に答える