我注意到在棉花糖(如的Nexus 6P),還對一些最近更新的棒棒糖手機(如銀河S5),當我連接到一個沒有互聯網WiFi網絡,該網絡將無法完全連接,直到用戶接受提示說網絡沒有互聯網接入。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