0

這裏工作是我想達到什麼:附表上網時熄滅了AndroidØ

  1. 監視網絡狀態的背景。
  2. 當設備沒有互聯網。
  3. 觸發作業。

Currently我看看,有沒有可能時,裝置會「沒有互聯網」狀態觸發任務。任何解決方法或解決方案?

注:我不喜歡通過前臺服務監測設備的互聯網連接。

+0

我知道你已經說你不會喜歡前臺服務,但你不介意使用一個處理器的postDelayed爲每分鐘或10分鐘上網查是否連接不和如果斷開連接,則調用方法。 –

+0

'處理程序允許您發送和處理與線程的MessageQueue關聯的消息和可運行對象。所以一個處理程序與一個線程相關聯。我應該使用哪個線程進行定期檢查?如果我在'main'線程上做這樣的操作不會是濫用資源嗎?爲了實現細緻的控制,我甚至可能需要每5秒鐘進行一次這種定期檢查。 –

+0

用我正在使用的類似的東西來回答。 –

回答

0

以下是您可以隨意使用的任何地方,但請記住它至少應該啓動一次,這意味着要麼將其放入onCreate中,要麼在方法中調用該方法至少一次。

Handler handler = new Handler(); 
int timeDelay = 5000;  //5 seconds 
handler.postDelayed(new Runnable(){ 
    public void run(){ 
     if(!isOnline) 
     { 
      yourMethodCall(); 
     }    
     handler.postDelayed(this, timeDelay); 
    } 
}, delay); 

public boolean isOnline() throws InterruptedException, IOException { 
     String command = "ping -c 1 google.com"; 
     return (Runtime.getRuntime().exec(command).waitFor() == 0); 
    } 

這是將檢查工作每5秒互聯網連接,如果連接不工作,然後它會調用你的方法,它的代碼。此外,請注意Handler代碼將被放置在方法中,而isOnline()是一種方法。

在這裏工作是突出顯示的,因爲檢查互聯網連接的最常見方法實際上如果WiFi沒有互聯網連接(基本上沒有互聯網熱點)返回true。但是因爲你只是想檢查沒有連接,你也可以使用這個代碼。

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
} 

但是,如果採用這種方式,你必須申報在AndroidManifest.xml權限是<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

利用這一點,將工作的偉大。

是的,它會在後臺運行。在我的應用程序中沒有問題,但有些用戶報告說,使用ping檢查連接的方法isOnline()有時會在線程未收到ping 5秒的情況下凍結線程。所以,如果這發生在你身上,你將不得不使用isNetworkAvailable()方法,直到isOnline()更好。

編輯 -

Android References看,我發現這一點: void onDataConnectionStateChanged (int state)

這可以用來確定網絡狀態的變化。 默認狀態是:

DATA_DISCONNECTED 
DATA_CONNECTING 
DATA_CONNECTED 
DATA_SUSPENDED 
+0

感謝您的代碼。但是這會在'main'線程中運行。我要做的是在單獨的工作線程上運行它。我猜除了定期網絡檢查沒有其他辦法 –

+0

正如你所做的一樣,無論是使用定時器還是使用Alarm Manager或Handler,因爲沒有像NetworkStateChangeListener那樣的,所以從這三者中,最好是Handler,如果延遲小於10分鐘。 –

+0

@Shaileshmota我剛剛在Android引用中找到並找到[this](https://developer.android.com/reference/android/telephony/PhoneStateListener.html#onDataConnectionStateChanged(int)),這可能很有用。 –

相關問題