日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 连接wifi 检测是否需要portal 认证

發布時間:2023/12/14 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 连接wifi 检测是否需要portal 认证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

最近在做一個新需求,就是針對開機歡迎引導頁,當連接如星巴克,KFC,地鐵上等公共場所的WIFI時,都需要認證功能,而我要調起這個認證頁面呈現給用戶,登陸任何網頁會跳轉到wifi得認證頁面,輸入賬號密碼,點擊驗證,能夠驗證wifi,并保證手機網絡能正常使用。某些手機管家軟件在手機連接上CMCC等wifi時,會彈出通知欄提示跳轉到webview去進行portal驗證。而我由于各種限制原因,并不能自動調用,就需要自己來處理這些功能了,而他們是怎樣檢測的呢?請往下看~

正文

我們的目標很明確,就是要在wifi連接后,判斷wifi是否需要portal驗證?如果需要portal驗證,那么我們直接啟動一個Activity,默認用WebView去加載一個網頁,比如:http://XXX.com,服務器就會去檢測當前網絡是否需要驗證(Google會進行一個http的訪問,如果返回碼為204,就證明手機當前連接的wifi,是不需要進行portal驗證的)portal 檢測到有新的連接,就會去劫持wifi路由,強制訪問wifi的portal驗證網頁,用戶只要完成驗證,就可以使用該網絡了,實現原理如下:

/*** 驗證當前wifi是否需要Portal驗證* @return*/ private boolean isWifiSetPortal() {String mWalledGardenUrl = "http://g.cn/generate_204";// 設置請求超時int WALLED_GARDEN_SOCKET_TIMEOUT_MS = 10000;HttpURLConnection urlConnection = null;try {URL url = new URL(mWalledGardenUrl);urlConnection = (HttpURLConnection) url.openConnection();urlConnection.setInstanceFollowRedirects(false);urlConnection.setConnectTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);urlConnection.setReadTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);urlConnection.setUseCaches(false);urlConnection.getInputStream();// 判斷返回狀態碼是否204return urlConnection.getResponseCode()!=204;} catch (IOException e) {// e.printStackTrace();return false;} finally {if (urlConnection != null) {//釋放資源urlConnection.disconnect();}}}

這塊驗證一般放在網絡改變的廣播接受者里面處理的action.equals(ConnectivityManager.CONNECTIVITY_ACTION

把驗證方法封裝一下就可以判斷使用了,很簡單吧~~

package woyou.welcome.api;import android.os.AsyncTask;import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL;/*** Created by Xiho on 11:09* MyBlog: xuhaoblog.com* GitHub: github.com/git-xuhao* Function:*/ public class CheckWifiLoginTask extends AsyncTask<Integer,Integer,Boolean> {private ICheckWifiCallBack mCallBack;public CheckWifiLoginTask (ICheckWifiCallBack mCallBack){super();this.mCallBack=mCallBack;}@Overrideprotected Boolean doInBackground(Integer... params) {return isWifiSetPortal();}@Overrideprotected void onPostExecute(Boolean result) {if (mCallBack != null) {mCallBack.portalNetWork(result);}}/*** 驗證當前wifi是否需要Portal驗證* @return*/private boolean isWifiSetPortal() {String mWalledGardenUrl = "http://g.cn/generate_204";// 設置請求超時int WALLED_GARDEN_SOCKET_TIMEOUT_MS = 10000;HttpURLConnection urlConnection = null;try {URL url = new URL(mWalledGardenUrl);urlConnection = (HttpURLConnection) url.openConnection();urlConnection.setInstanceFollowRedirects(false);urlConnection.setConnectTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);urlConnection.setReadTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);urlConnection.setUseCaches(false);urlConnection.getInputStream();// 判斷返回狀態碼是否是204return urlConnection.getResponseCode()!=204;} catch (IOException e) {// e.printStackTrace();return false;} finally {if (urlConnection != null) {//釋放資源urlConnection.disconnect();}}}/*** 檢測Wifi 是否需要portal 認證* @param callBack*/public static void checkWifi(ICheckWifiCallBack callBack){new CheckWifiLoginTask(callBack).execute();}public interface ICheckWifiCallBack{void portalNetWork(boolean isLogin);}}

在廣播接收里判斷網絡是否需要portal認證:

/** * 接受網絡改變的廣播 */private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context mContext, Intent intent) {String action = intent.getAction();if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {//.....省略邏輯portalWifi();} }};/** wifi 認證 檢測 **/private void portalWifi() {CheckWifiLoginTask.checkWifi(new CheckWifiLoginTask.ICheckWifiCallBack() {@Overridepublic void portalNetWork(boolean isLogin) {//不需要wifi認證if(!isLogin){//TODO... }else {//TODO...}}});}

實現原理很簡單吧~

總結

以上是生活随笔為你收集整理的Android 连接wifi 检测是否需要portal 认证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。