Android,连接到wifi网络时如何覆盖互联网连接检查?
我注意到,在棉花糖(如Nexus 6P)和一些最近更新的棒棒糖手机(如Galaxy S5)上,当我连接到一个没有互联网的wifi网络时,网络将无法完全连接,直到用户接受网络没有互联网接入的提示 是否有任何方法可以通过编程绕过此检查,并允许wifi连接继续进行,而不管是否访问internet?检查这些链接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源代
没有尝试这些,但您可以尝试将
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;
}