Android,连接到wifi网络时如何覆盖互联网连接检查?
我注意到在棉花糖(如的Nexus 6P),还对一些最近更新的棒棒糖手机(如银河S5),当我连接到一个没有互联网WiFi网络,该网络将无法完全连接,直到用户接受提示说网络没有互联网接入。Android,连接到wifi网络时如何覆盖互联网连接检查?
有没有什么办法可以以编程方式绕过这个检查,并允许无线连接继续进行,无论互联网接入?
检查这些链接..
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操作。
那不是重定向永远不让他使用谷歌? – Squirrelkiller
人们可以创建一个循环检查连接,这将删除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;
}
的Android本身并没有暴露任何方法这是做什么的。您可以通过反射为每个供应商做到这一点。似乎只有解决方案,而不是一个好的。 – ozmank