2017-03-18 74 views
0

我想實現一個後臺服務和廣播接收器來檢查我的設備上是否有互聯網,甚至在應用程序關閉時發出http請求,這些都來自我的活動。要做到這一點,我檢查了這個網站上的主題,但我不明白一些東西。 我不明白該怎麼做,OnReceive()函數是否在我的廣播接收器每次連接更改時調用?或者當我在我的活動中註冊我的接收器?有人能告訴我更多關於我需要做什麼來實現我想要的嗎?我已經創建了我的廣播接收器,但我對其他部分感到迷惑。謝謝Android:廣播接收器和後臺服務

+0

[服務中的廣播接收器]的可能重複(http://stackoverflow.com/questions/9092134/broadcast-receiver-within-a-service) – rkmax

回答

0

首先在應用程序範圍內創建後臺服務,如果超出了應用程序GCMTaskManger或JobScheduler的範圍,可以使用Handler類。

發出HTTP請求甚至當應用程序被關閉,所有從我的活動

爲此使用的jobscheduler或GCMTaskManager,當應用程序關閉時甚至會打電話給你的HTTP請求。

有人能告訴我更多關於我需要做什麼來實現我想要的嗎?

因此,可以說你正在使用GCMTaskManager你會初始化服務第一

mGcmNetworkManager = GcmNetworkManager.getInstance(this); 

然後安排你的任務的區間內運行

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

    mGcmNetworkManager.schedule(task); 

,然後偵聽事件

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