Android,连接到wifi网络时如何覆盖互联网连接检查?

Android,连接到wifi网络时如何覆盖互联网连接检查?

问题描述:

我注意到在棉花糖(如的Nexus 6P),还对一些最近更新的棒棒糖手机(如银河S5),当我连接到一个没有互联网WiFi网络,该网络将无法完全连接,直到用户接受提示说网络没有互联网接入。Android,连接到wifi网络时如何覆盖互联网连接检查?

有没有什么办法可以以编程方式绕过这个检查,并允许无线连接继续进行,无论互联网接入?

+0

的Android本身并没有暴露任何方法这是做什么的。您可以通过反射为每个供应商做到这一点。似乎只有解决方案,而不是一个好的。 – ozmank

检查这些链接..

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; 
} 

没有尝试这些,但你可以尝试重定向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

你可以试试这个

要验证网络可用性:

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; 
}