2016-07-24 140 views
9

我注意到在棉花糖(如的Nexus 6P),還對一些最近更新的棒棒糖手機(如銀河S5),當我連接到一個沒有互聯網WiFi網絡,該網絡將無法完全連接,直到用戶接受提示說網絡沒有互聯網接入。Android,連接到wifi網絡時如何覆蓋互聯網連接檢查?

有沒有什麼辦法可以以編程方式繞過這個檢查,並允許無線連接繼續進行,無論互聯網接入?

+0

的Android本身並沒有暴露任何方法這是做什麼的。您可以通過反射爲每個供應商做到這一點。似乎只有解決方案,而不是一個好的。 – ozmank

回答

0

檢查這些鏈接..

check Internet connection

public final boolean isInternetOn() 
{ 
    ConnectivityManager connec = (ConnectivityManager) 
    getSystemService(Context.CONNECTIVITY_SERVICE); 

    // ARE WE CONNECTED TO THE NET 
    if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || 
     connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) 
    { 
    // MESSAGE TO SCREEN FOR TESTING (IF REQ) 
    //Toast.makeText(this, connectionType + 」 connected」, Toast.LENGTH_SHORT).show(); 
    return true; 
    } 
    else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED 
    || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) 
    { 
    return false; 
    } 

    return false; 
    } 

check Internet connection with url if available

public static boolean hasActiveInternetConnection(Context context) { 
    if (isNetworkAvailable(context)) { 
     try { 
      HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); 
      urlc.setRequestProperty("User-Agent", "Test"); 
      urlc.setRequestProperty("Connection", "close"); 
      urlc.setConnectTimeout(1500); 
      urlc.connect(); 
      return (urlc.getResponseCode() == 200); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "Error checking internet connection", e); 
     } 
    } else { 
     Log.d(LOG_TAG, "No network available!"); 
    } 
    return false; 
} 
1

沒有嘗試這些,但你可以嘗試重定向www.google.com和8.8.8.8到127.0.0.1(你可以使用iptables或修改/system/hosts)。您還可以嘗試挖掘AOSP源代碼(這些是我在AOSP中發現的唯一isReachable()檢查)。

如果你決定要查找AOSP,你就可以開始here

附:您需要root用於iptables和/ system/hosts操作。

+0

那不是重定向永遠不讓他使用谷歌? – Squirrelkiller

+0

人們可以創建一個循環檢查連接,這將刪除iptables的,因爲是一個有效的互聯網連接,儘快排除。 – sssemil

1

你可以試試這個

要驗證網絡可用性:

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

要驗證網絡連接(連接無線網絡是否激活):

public Boolean isOnline() { 
    try { 
     Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com"); 
     int returnVal = p1.waitFor(); 
     boolean reachable = (returnVal==0); 
     return reachable; 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return false; 
}