Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android,连接到wifi网络时如何覆盖互联网连接检查?_Android_Android Wifi - Fatal编程技术网

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

Android,连接到wifi网络时如何覆盖互联网连接检查?,android,android-wifi,Android,Android Wifi,我注意到,在棉花糖(如Nexus 6P)和一些最近更新的棒棒糖手机(如Galaxy S5)上,当我连接到一个没有互联网的wifi网络时,网络将无法完全连接,直到用户接受网络没有互联网接入的提示 是否有任何方法可以通过编程绕过此检查,并允许wifi连接继续进行,而不管是否访问internet?检查这些链接 没有尝试这些,但您可以尝试将www.google.com和8.8.8.8重定向到127.0.0.1(您可以使用iptables或修改/system/hosts)。您还可以尝试挖掘AOSP源代

我注意到,在棉花糖(如Nexus 6P)和一些最近更新的棒棒糖手机(如Galaxy S5)上,当我连接到一个没有互联网的wifi网络时,网络将无法完全连接,直到用户接受网络没有互联网接入的提示

是否有任何方法可以通过编程绕过此检查,并允许wifi连接继续进行,而不管是否访问internet?

检查这些链接


没有尝试这些,但您可以尝试将
www.google.com
和8.8.8.8重定向到127.0.0.1(您可以使用iptables或修改
/system/hosts
)。您还可以尝试挖掘AOSP源代码(这是我在AOSP中找到的唯一isRecable()检查)

如果决定查找AOSP,则可以开始

另外,您需要root才能进行iptables和/system/hosts操作。

您可以试试这个

要验证网络可用性,请执行以下操作:

private Boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
}
验证互联网接入(连接的wifi是否处于活动状态):


Android本身并没有公开任何这样做的方法。您可以通过对每个供应商进行反射来实现这一点。这似乎是唯一的解决方案,但不是一个好的解决方案。这种重定向不会永远阻止他使用谷歌吗?可以创建一个连接循环检查,一旦有活动的互联网连接,它就会删除iptables规则。
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;
}
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;
}