2016-07-24 21 views
9

Ich habe auf Marshmallow (zB Nexus 6P) und auch auf einigen kürzlich aktualisierten Lollipop-Handys (zB Galaxy S5) bemerkt, dass wenn ich mich mit einem WLAN-Netzwerk ohne Internet verbinde, das Netzwerk nicht vollständig verbindet, bis der Benutzer akzeptiert die Meldung, dass das Netzwerk keinen Internetzugang hat.Android, wie kann die Internetkonnektivität beim Anschluss an ein WLAN-Netzwerk außer Kraft gesetzt werden?

Gibt es eine Möglichkeit, diesen Check programmatisch zu umgehen und WLAN-Verbindungen unabhängig vom Internetzugang zu ermöglichen?

+0

Android selbst jede Methode nicht ausgesetzt was macht das. Sie können dies durch Reflexion für jeden Anbieter tun. Scheint wie nur eine Lösung und nicht eine gute. – ozmank

Antwort

0

Schauen Sie sich diese Verbindung ..

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

Versuche dies nicht, aber Sie könnten versuchen, www.google.com und 8.8.8.8 auf 127.0.0.1 Umleitung (Sie kann Iptables verwenden oder /system/hosts ändern). Sie können auch versuchen, den AOSP-Quellcode zu graben (dies sind die einzigen isReachable() - Prüfungen, die ich in AOSP gefunden habe).

Wenn Sie sich entscheiden AOSP nachzuschlagen, Sie here

P. S. beginnen Sie benötigen root für die Manipulation von iptables und/system/hosts.

+0

Würde diese Umleitung nicht für immer davon abhalten, Google zu verwenden? – Squirrelkiller

+0

Man kann eine Schleife erstellen, die nach Verbindungen sucht, die diese iptables-Regel entfernen, sobald eine aktive Internetverbindung besteht. – sssemil

1

können Sie versuchen, diese

Um die Verfügbarkeit des Netzwerks zu überprüfen:

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

Um Internetzugang zu überprüfen (verbunden WiFi aktiv ist oder nicht):

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