簡體   English   中英

如何檢測用戶何時連接到公共wifi但未批准wifi使用條款

[英]How to detect when the user is connected to public wifi BUT not approved wifi term of use

我的應用程序需要在具有免費公共wifi網絡的工作場所/機場工作。

我想通知用戶何時需要通過網絡瀏覽器批准wifi使用條款。

我試圖提取信息,但是沒有找到任何屬性/信息來隔離這種情況

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

}

在單擊Web瀏覽器之前和之后進行檢查時,我得到相同的結果。 請告知,謝謝,路德

您應該首先進行連接檢查,以驗證您是否在Captive Portal 圍牆花園內

SO上對此有很好的解釋。

盡管如此,這仍無法為您提供有關強制門戶網站的信息。

因此,您將必須手動處理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();
   }

官方文檔足夠慷慨地提供一系列示例 ,包括處理網絡登錄,Http身份驗證以及處理cookie。 您應該看一下。 希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM