Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Wifi開發

Android Wifi開發

編輯:關於Android編程

WIFI簡介

WifiManager

public class WifiManager

? android.net.wifi.WifiManager

這個類提供了管理Wi-Fi連接的所有方面的主要API。它涉及幾類產品:

配置網絡列表。該列表可以查看和更新??,單個條目的屬性進行修改。 當前活動的Wi-Fi網絡,如果有的話。連接可以建立或拆除,並且有關網絡的狀態的動態信息可以查詢。 接入點的掃描的結果,包含足夠的信息來什麼接入點連接到決策。 它定義了在任何類型的Wi-Fi狀態變化的各種轉播意向動作的名稱。

這是表演的Wi-Fi具體操作時要使用的API。

常用公共方法

int addNetwork(WifiConfiguration config)
添加一個新的網絡描述為一套配置網絡。

boolean disableNetwork(int netId)
禁用配置的網絡。

boolean disconnect()
從當前活動的接入點撇清。

boolean enableNetwork(int netId, boolean disableOthers)
允許之前配置的網絡與關聯。

List getConfiguredNetworks()
返回請求者配置的所有網絡的列表。

WifiInfo getConnectionInfo()
返回有關當前Wi-Fi連接的動態信息,如果有的話是積極的。

DhcpInfo getDhcpInfo()
從最後一次成功DHCP請求返回DHCP分配的地址,如果有的話。

List getScanResults()
返回最新的接入點掃描的結果。

int getWifiState()
獲取Wi-Fi功能的狀態。

boolean isWifiEnabled()
返回的Wi-Fi是否已啟用或禁用。

boolean reconnect()
重新連接到當前活動的訪問點上,如果我們目前正在斷開。

boolean removeNetwork(int netId)
從配置網絡的列表中刪除指定的網絡。

boolean setWifiEnabled(boolean enabled)
啟用或禁用無線網絡連接。

boolean startScan()
請求接入點的掃描。

int updateNetwork(WifiConfiguration config)
更新現有配置的網絡的網絡描述。

1.獲取WifiManger

        //取得WifiManager對象
        mWifiManager = (android.net.wifi.WifiManager) context
                .getSystemService(Context.WIFI_SERVICE);
        // 取得WifiInfo對象
        mWifiInfo = mWifiManager.getConnectionInfo();

2.打開wifi

    /** 打開WIFI*/
    public void openWifi() {
        if (!mWifiManager.isWifiEnabled()) {
            mWifiManager.setWifiEnabled(true);
        }
    }

3.關閉wifi

    /**關閉WIFI*/
    public void closeWifi() {
        if (mWifiManager.isWifiEnabled()) {
            mWifiManager.setWifiEnabled(false);
        }
    }

4.連接指定的wifi

    /**添加一個網絡並連接*/
    public void addNetworkWPA(String wifiName ,String wifiPassword) {
        WifiConfiguration wifiConfiguration = CreateWifiInfo(wifiName, wifiPassword, 3);
        int wcgID = mWifiManager.addNetwork(wifiConfiguration);
        boolean b =  mWifiManager.enableNetwork(wcgID, true);
        Log.d(TAG,"wcgID="+wcgID);
        Log.d(TAG,"b="+b);
    }

5.斷開當前連接的wifi

    /**斷開指定ID的網絡*/
    public void disconnectWifi(int netId) {
        mWifiManager.disableNetwork(netId);
        mWifiManager.disconnect();
    }

6.收索wifi

    /**搜索附近的wifi*/
    List scanResults = wifiManager.startScanWifi();

7.完整的wifi工具類

    /**
     * Description :
     * Author : liujun
     * Email  : [email protected]
     * Date   : 2016/8/12 0012
     */
    public class WifiHelper {

        public static final String TAG="WifiHelper";
        //管理wifi
        private android.net.wifi.WifiManager mWifiManager;
        // WifiInfo對象
        private WifiInfo mWifiInfo;
        // 掃描出的
        private List mWifiList;
        // 網絡連接列表
        private List mWifiConfigurations;
        // 定義一個WifiLock
        private android.net.wifi.WifiManager.WifiLock mWifiLock;
        //管理網絡連接
        private http://blog.csdn.net/u012987546/article/details/ConnectivityManager connectManager;
        //網絡連接
        private NetworkInfo netInfo;
        //動態主機配置協議信息的對象,獲得IP等網關信息
        private DhcpInfo dhcpInfo;

        /**
         * 構造器
         * @param context
         */
        public WifiHelper(Context context) {
            //取得WifiManager對象
            mWifiManager = (android.net.wifi.WifiManager) context
                    .getSystemService(Context.WIFI_SERVICE);
            // 取得WifiInfo對象
            mWifiInfo = mWifiManager.getConnectionInfo();
             //獲取管理網絡連接對象
    //        connectManager = (http://blog.csdn.net/u012987546/article/details/ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
              //獲取網絡連接對象
    //        netInfo = connectManager.getNetworkInfo(http://blog.csdn.net/u012987546/article/details/ConnectivityManager.TYPE_WIFI);
              //獲取動態主機配置協議信息的對象
    //        dhcpInfo = mWifiManager.getDhcpInfo();
        }

        /**再次獲取wifi信息*/
        public void reSetWifiInfo(){
            // 取得WifiInfo對象
            mWifiInfo = mWifiManager.getConnectionInfo();
        }

        /** 打開WIFI*/
        public void openWifi() {
            if (!mWifiManager.isWifiEnabled()) {
                mWifiManager.setWifiEnabled(true);
            }
        }

        /**關閉WIFI*/
        public void closeWifi() {
            if (mWifiManager.isWifiEnabled()) {
                mWifiManager.setWifiEnabled(false);
            }
        }

        /**
         * 檢查當前WIFI狀態
         * 1.WifiManager.WIFI_STATE_DISABLING: Wi-Fi已被禁用
         * 2.WifiManager.WIFI_STATE_DISABLING: 無線網絡目前正在禁用
         * 3.WifiManager.WIFI_STATE_ENABLED: Wi-Fi已啟用
         * 4.WifiManager.WIFI_STATE_ENABLING:目前正在支持Wi-Fi
         * 5.WifiManager.WIFI_STATE_UNKNOWN:無線網絡處於未知狀態
          */
        public int getWifiState() {
            return mWifiManager.getWifiState();
        }

        /**
         * 返回最新的接入點(wifi)的結果
         * ScanResult包含:
         * ScanResult.level : wifi信號強度,值越大信號越強
         * scanResult.frequency:wifi的頻率
         * scanResult.SSID: wifi名稱
         * scanResult.BSSID:wifi的BSSID
         * ......
         * @return
         */
        public List  startScanWifi() {
            mWifiManager.startScan();
            // 得到掃描結果
            mWifiList = mWifiManager.getScanResults();
            return mWifiList;
        }

        /**返回請求者配置的所有網絡的列表。*/
        public List getConfiguredNetworks(){
            // 得到配置好的網絡連接
            mWifiConfigurations = mWifiManager.getConfiguredNetworks();
            return mWifiConfigurations;
        }
        /** 得到MAC地址*/
        public String getMacAddress() {
            return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
        }

        /**得到接入點的BSSID*/
        public String getBSSID() {
            return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
        }

        /**得到IP地址*/
        public int getIPAddress() {
            return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
        }
        /**得到連接的ID*/
        public int getNetworkId() {
            return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
        }

        /**得到WifiInfo的所有信息包*/
        public String getWifiInfo() {
            return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
        }

        /**添加一個網絡並連接*/
        public void addNetworkWPA(String wifiName ,String wifiPassword) {
            WifiConfiguration wifiConfiguration = CreateWifiInfo(wifiName, wifiPassword, 3);
            int wcgID = mWifiManager.addNetwork(wifiConfiguration);
            boolean b =  mWifiManager.enableNetwork(wcgID, true);
            Log.d(TAG,"wcgID="+wcgID);
            Log.d(TAG,"b="+b);
        }

        /**斷開指定ID的網絡*/
        public void disconnectWifi(int netId) {
            mWifiManager.disableNetwork(netId);
            mWifiManager.disconnect();
        }

        /**允許之前配置的網絡與關聯*/
        public void enableNetwork(int netId){
            mWifiManager.enableNetwork(netId,false);
        }

        /**創建一個wifi配置信息*/
        private WifiConfiguration CreateWifiInfo(String SSID, String Password, int Type)
        {
            WifiConfiguration config = new WifiConfiguration();
            config.allowedAuthAlgorithms.clear();
            config.allowedGroupCiphers.clear();
            config.allowedKeyManagement.clear();
            config.allowedPairwiseCiphers.clear();
            config.allowedProtocols.clear();
            config.SSID = "\"" + SSID + "\"";

            WifiConfiguration tempConfig = this.IsExsits(SSID);
            if(tempConfig != null) {
                mWifiManager.removeNetwork(tempConfig.networkId);
            }
            /**連接不需要密碼的wifi*/
            if(Type == 1) //WIFICIPHER_NOPASS
            {
                config.wepKeys[0] = "\"\"";
                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                config.wepTxKeyIndex = 0;
            }
            /**連接wep格式加密wifi*/
            if(Type == 2) //WIFICIPHER_WEP
            {
                config.hiddenSSID = true;
                config.wepKeys[0]= "\""+Password+"\"";
                config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                config.wepTxKeyIndex = 0;
            }
            /**連接WPA格式加密wifi(就是我們平時使用的加密方法)*/
            if(Type == 3) //WIFICIPHER_WPA
            {
                config.preSharedKey = "\""+Password+"\"";
                config.hiddenSSID = true;
                config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
                config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
                //config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
                config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
                config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
                config.status = WifiConfiguration.Status.ENABLED;
            }
            return config;
        }

        private WifiConfiguration IsExsits(String str){
            List existingConfigs = mWifiManager.getConfiguredNetworks();
            for (WifiConfiguration existingConfig : existingConfigs){
                if (existingConfig.SSID.equals(str.trim())){
                    return existingConfig;
                }
            }
            return null;
        }

    }

8.完整的項目下載地址github

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved