2015-02-11 51 views
1

看來我正面臨網絡檢查不可靠的問題。我的意思是說,實際上網絡不可用時,它有時會返回true。Android網絡檢查不可靠

這發生在現實世界的情況下,當你去地下和信號鬆動,手機正確報告顯示沒有酒吧,但檢查仍然會返回true。

我用下面的代碼:

ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);  
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    boolean isNetworkAvailalbe = (activeNetworkInfo != null); 

我在尋找實現可靠的網絡檢查最防彈的方式,任何建議?

+0

檢查此主題,同樣的問題已經回答了。 http://stackoverflow.com/questions/28448197/android-check-internet-connection-returns-true-incorrectly – dhuma1981 2015-02-11 07:12:59

回答

1

嘗試用這個..

public static boolean checkNetworkRechability(Context mContext) { 
     ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     isInternetAvailable(); 
     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 

    public static boolean isInternetAvailable() { 
     Log.i("TAG", "isInternetAvailable start"); 
     try { 
      InetAddress ipAddr = InetAddress.getByName(new URL("google.com").getHost()); 


      String ip = ipAddr.getHostAddress(); 
      if (ip.equals("")) { 
       return false; 
      } else { 
       Log.i("TAG", "IP Address : " + ip); 
       return true; 
      } 

     } catch (Exception e) { 
      return false; 
     } 

    } 
+0

謝謝你 - 我覺得這是對@Sandro提供的答案的一個很好的迭代。你有沒有遇到這種方法在現場測試時需要更長的時間執行? – AlexVPerl 2015-02-14 22:21:34

+0

在調查這個答案時 - 從某種意義上說,現在必須在單獨的線程中執行,否則會引發NetworkOnMainTreadException似乎有點麻煩。 – AlexVPerl 2015-02-14 22:34:57

1
ConnectivityManager cm = 
    (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
boolean isConnected = activeNetwork != null && 
         activeNetwork.isConnectedOrConnecting(); 

在Android開發者門戶網站,你可以找到更多的信息:http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

+1

謝謝你,我正在測試,並會回覆這是否解決了這個問題。 – AlexVPerl 2015-02-14 22:19:51

+0

抱歉,如此漫長的回訪時間。需要真正走出現場測試這一點。我不得不承認這種情況發生的頻率較低,但仍然存在。所以這不能解決問題。謝謝。 – AlexVPerl 2015-03-20 18:30:38