2016-11-23 6 views
0

私のアプリは無料の公共WiFiネットワークを持つ職場/空港で作業する必要があります。ユーザーが公共WiFiに接続されているときを検出する方法WiFiの使用が承認されていない

ウェブブラウザからwifiの使用期間を承認する必要がある場合は、その旨をユーザーに通知したいと考えています。

私は情報を抽出しようとした、しかし、私は前に、Webブラウザをクリックした後にチェックすると、私は同じ結果を得た

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("************************************************************************************"); 

} 

このケースを隔離するために任意の属性/情報を見つけることができませんでした。 あなたがキャプティブポータル壁に囲まれた庭園内にあることを確認するために、接続性チェックを実行して開始する必要があり、 おかげで、 ルーサー

+0

このサーバーに「ping」しようとすると、接続されていれば動作しません。 –

答えて

0

を教えてください。

here on SOのかなり良い説明があります。

これでも、キャプティブポータル自体に関する情報は得られません。

ですから、公式ドキュメントとしてネットワークサインオンの取り扱い含まexamples、一連のHTTP認証を提供するのに十分寛大で手動HttpUrlConnectionレスポンスヘッダを処理し、リダイレクト

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

を探す必要がありますクッキーの取り扱いあなたはそれを見てください。 これが役立つことを願っています!

+0

@kokoあなたはそれを稼働させることができましたか? – HenriqueMS

関連する問題