2013-01-16 175 views
1

是否有任何後臺任務在應用程序中運行以檢查以下情況下的互聯網連接是否常見?在Android中檢查互聯網連接

解析1.啓動/從服務器

2.In解析之間/從服務器

任何示例代碼或鏈接獲取獲取數據幫助了我很多。

+0

* Service ..... *? –

+0

是的,這是最適合像服務或可能是接收器我有代碼,將只適用於第一種情況 – Manju

回答

0

您可以對這兩項任務使用服務。

  • 第一個,調用服務,當下載要開始時。

  • 使用一段時間後執行的服務中的線程來檢查活動的Internet連接。

編輯 -

這可能是這樣的,

Thread thread = new Thread() 
{ 
     @Override 
     public void run() { 
      try { 
       while(true) { 
        sleep(1000); 
        Toast.makeText(getBaseContext(), "Running Thread...", Toast.LENGTH_LONG).show(); 
        // Check internet connectivity here 
       } 
      } catch (InterruptedException e) { 
      Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG).show(); 
      } 
     } 
    }; 

thread.start(); 

看一看這個post也。

我也發現了其他兩個選項,

看一看計時器任務報警管理也來檢查過了一段時間的互聯網連接。

+0

感謝您的答覆,但我不知道如何處理該線程可以幫助我的一些鏈接或代碼,如果可能 – Manju

+0

@Manju請參閱已編輯的部分。 –

+0

感謝您的快速響應我有一個疑問,在這裏我會寫一個服務,我將把方法放在那個檢查互聯網連接的方法,我認爲服務將在後臺運行,如果在下載開始之前調用服務,爲什麼我應該再次寫這個線程邏輯爲服務將始終在後臺運行一些如何不可能使雙方都到一個單位抱歉如果我問的問題是不正確的 – Manju

0

可以啓動IntentServiceService並使用此:

public boolean CheckInternet() 
    { 
     ConnectivityManager connec = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
     android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager. 

     if (wifi.isConnected()) { 
      return true; 
     } else if (mobile.isConnected()) { 
      return true; 
     } 
     return false; 
    } 

而且不要忘了這個權限添加到AndroidManifest文件:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

感謝您的回覆,這將適用於第一種情況,請建議我,如果你有任何想法,這兩種情況下都可以,預先感謝 – Manju

+0

只要你需要它就調用這個方法。如果你需要從多個類中檢查這個,你可以簡單地將這個代碼重構爲一個自定義的UtilClass,作爲一個靜態方法。 在第一次調用服務器之前 - > MyUtils.CheckInternet()。 在下次調用服務器之前解析數據+> MyUtils.CheckInternet()等... – Rob

0

您可以使用下面的工具類 確保在清單中提供互聯網許可。

讓我知道是否有問題。

private static NetworkUtil mInstance; 
private volatile boolean mIsOnline; 

private NetworkUtil() { 
    ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(); 
    exec.scheduleAtFixedRate(new Runnable() { 
     @Override 
     public void run() { 
      boolean reachable = false; 
      try { 
       Process process = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com"); 
       int returnVal = process.waitFor(); 
       reachable = (returnVal==0); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      mIsOnline = reachable; 
     } 
    }, 0, 5, TimeUnit.SECONDS); 
} 

public static NetworkUtil getInstance() { 
    if (mInstance == null) { 
     synchronized (NetworkUtil.class) { 
      if (mInstance == null) { 
       mInstance = new NetworkUtil(); 
      } 
     } 
    } 
    return mInstance; 
} 

public boolean isOnline() { 
    return mIsOnline; 
}