2016-11-23 2 views
0

Meine App muss an Arbeitsplätzen/Flughäfen arbeiten, die ein kostenloses öffentliches WiFi-Netzwerk haben.Wie erkennen, wenn der Benutzer mit öffentlichen WLAN verbunden ist, aber nicht genehmigt wifi Begriff der Verwendung

Ich möchte den Benutzer informieren, wenn er die WiFi-Nutzungsdauer über einen Webbrowser genehmigen muss.

Ich habe versucht, Informationen zu extrahieren, aber fand keine Attribut/Infos diesen Fall

public static void haveNetworkConnection(Context mContext) { 
    ConnectivityManager cm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 


    if (activeNetwork != null) { // connected to the internet 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
      // connected to wifi 
      Toast.makeText(mContext, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show(); 
      printWifiInformation(activeNetwork); 
     } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
      // connected to the mobile provider's data plan 
      Toast.makeText(mContext, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show(); 
     } 
    } else { 
     Toast.makeText(mContext, "Not connected", Toast.LENGTH_SHORT).show(); 
    } 
} 

public static void printWifiInformation(NetworkInfo activeNetwork){ 

    System.out.println("************************************************************************************"); 
    System.out.println("1 . describeContents   " + activeNetwork.describeContents()); 
    System.out.println("2 . getDetailedState   " + activeNetwork.getDetailedState()); 
    System.out.println("3 . getExtraInfo    " + activeNetwork.getExtraInfo()); 
    System.out.println("4 . getReason    " + activeNetwork.getReason()); 
    System.out.println("5 . getState     " + activeNetwork.getState()); 
    System.out.println("6 . getSubtype    " + activeNetwork.getSubtype()); 
    System.out.println("7 . getSubtypeName   " + activeNetwork.getSubtypeName()); 
    System.out.println("8 . getSubtypeName   " + activeNetwork.getSubtypeName()); 
    System.out.println("9 . getType     " + activeNetwork.getType()); 
    System.out.println("10. getTypeName    " + activeNetwork.getTypeName()); 
    System.out.println("11. isAvailable    " + activeNetwork.isAvailable()); 
    System.out.println("12. isConnected    " + activeNetwork.isConnected()); 
    System.out.println("13. isConnectedOrConnecting " + activeNetwork.isConnectedOrConnecting()); 
    System.out.println("14. isFailover    " + activeNetwork.isFailover()); 
    System.out.println("15. isRoaming    " + activeNetwork.isRoaming()); 
    System.out.println("************************************************************************************"); 

} 

ich das gleiche Ergebnis bekam zu isolieren, wenn ich vor und nach dem Klicken auf den Web-Browser überprüft. Bitte raten, Danke, Luther

+0

Sie könnten versuchen, diesen Server zu "pingen" und wenn es jetzt verbunden ist, wird es nicht funktionieren. –

Antwort

0

Sie sollten, indem Sie eine Konnektivitätsprüfung zu überprüfen beginnen, dass Sie sich in einem Captive Portalummauerten Garten sind.

Es gibt eine ziemlich gute Erklärung dafür here on SO.

Noch gibt es keine Informationen über das Captive-Portal selbst.

So müssen Sie manuell die HttpUrlConnection Response-Header verarbeiten und suchen nach einer Umleitung

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
    try { 
    InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
    if (!url.getHost().equals(urlConnection.getURL().getHost())) { 

     // we were redirected! Kick the user out to the browser to sign on? 
    } 
    ... 
    } finally { 
    urlConnection.disconnect(); 
    } 

Die offizielle Dokumentation ist großzügig genug, um eine Reihe von examples zu schaffen, die Handhabung umfassen Netzwerk-Sign-On, Http-Authentifizierung als sowie die Handhabung von Cookies. Du solltest es dir ansehen. Hoffe, das hilft!

+0

@koko hast du es geschafft, es funktioniert zu bekommen? – HenriqueMS

Verwandte Themen