2016-07-24 19 views
9

Zauważyłem na Marshmallow (np. Nexus 6P), a także na niektórych nowszych telefonach Lollipop (np. Galaxy S5), które po podłączeniu do sieci Wi-Fi, która nie ma internetu, sieć nie będzie w pełni łączona, dopóki użytkownik nie zaakceptuje podpowiedź, że sieć nie ma dostępu do Internetu.Android, jak zastąpić sprawdzanie łączności z Internetem podczas łączenia się z siecią Wi-Fi?

Czy istnieje sposób programowo obejść tego wyboru i umożliwić połączenia wifi, aby przejść niezależnie od dostępu do Internetu?

+0

sam Android nie ujawnił żadnej metody co to robi. Możesz to zrobić poprzez refleksję dla każdego dostawcy. Wydaje się, że to tylko rozwiązanie, a nie dobre. – ozmank

Odpowiedz

0

sprawdzić te link ..

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

Nie próbowaliśmy tych, ale można spróbować przekierowanie www.google.com i 8.8.8.8 do 127.0.0.1 (ci może używać iptables lub modyfikować /system/hosts). Możesz także spróbować wykopać kod źródłowy AOSP (są to jedyne sprawdzenia isReachable(), które znalazłem w AOSP).

Jeśli zdecydujesz się odnośnika AOSP można rozpocząć here

PS: Będziesz potrzebował root'a do manipulacji iptables i/system/hosts.

+0

Czy to przekierowanie na zawsze nie pozwoli mu korzystać z google? – Squirrelkiller

+0

Można utworzyć pętlę sprawdzającą połączenie, które usunie tę regułę iptables, gdy tylko będzie aktywne połączenie internetowe. – sssemil

1

Możesz spróbować tego

Aby sprawdzić dostępność sieci:

private Boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager 
      = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting(); 
} 

celu weryfikacji dostępu do internetu (połączony wifi jest aktywny czy nie):

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; 
} 
Powiązane problemy