2017-03-18 14 views
0

バックグラウンドサービスとブロードキャストレシーバを実装して、自分のデバイスにインターネットがあるかどうかを確認し、アプリケーションが閉じられていてもhttpリクエストを行いたいと思います。そうするために、私はこのウェブサイト上のトピックをチェックしましたが、私はいくつかのことを理解していません。 私はそれを行う方法を理解していない、OnReceive()関数は、ブロードキャストの受信機で毎回接続の変更を呼び出すですか?それとも私が自分のレシーバーを自分の活動に登録したときですか?誰かが私が望むものを達成するために何をする必要があるかについてもっと教えてもらえますか?私はすでに自分の放送受信機を作りましたが、私は他の部分のために迷っています。ありがとうAndroid:ブロードキャストレシーバとバックグラウンドサービス

+0

[サービス内のブロードキャスト受信者]の複製が可能です(http://stackoverflow.com/questions/9092134/broadcast-receiver-within-a-service) – rkmax

答えて

0

最初にアプリケーションGCMTaskMangerまたはJobSchedulerのスコープ外にあったハンドラクラスを使用できるアプリケーションの範囲内でバックグラウンドサービスを作成することができます。

メイクhttpリクエストにもアプリが閉じているときに、そのすべての私の活動から

アプリが閉じているときにも、あなたのHTTP要求を呼び出します。この使用jobschedulerのかGCMTaskManagerを、することができません。

私が欲しいものを達成するために必要なことについてもっと教えてもらえますか?

だから、あなたが間隔内

PeriodicTask task = new PeriodicTask.Builder() 
      .setService(MyTaskService.class) 
      .setTag(TASK_TAG_WIFI) 
      .setPeriod(30L) 
      .build(); 

    mGcmNetworkManager.schedule(task); 

を実行し、イベントをリッスンするようにタスクをスケジュールしますが、その後

mGcmNetworkManager = GcmNetworkManager.getInstance(this); 

最初のサービスを初期化しますGCMTaskManagerを使用していると言うことができます

mReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(MyTaskService.ACTION_DONE)) { 
       String tag = intent.getStringExtra(MyTaskService.EXTRA_TAG); 
       int result = intent.getIntExtra(MyTaskService.EXTRA_RESULT, -1); 

       String msg = String.format("DONE: %s (%d)", tag, result); 
       Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 

は私の放送受信機におけるOnReceive()関数は毎回接続が、イエスその後、onReceiveが呼び出された場合、待機するようにリスナーのためのイベントを生成するのかどうかのサービスに依存して

を変えると呼ばれています。

スケジューラの記事を読むことをお勧めします https://www.bignerdranch.com/blog/choosing-the-right-background-scheduler-in-android/

+0

ありがとうございます。チェックアウトします – Messerschmitt

関連する問題