Android之Wifi模块开发

来源:互联网 发布:ios6.0.1不能软件更新 编辑:程序博客网 时间:2024/05/02 02:29

    • 接口简介
    • 开发实例

接口简介

因为项目需要,所以完成了一个简单的wifi模块,主要实现了打开wifi、获取网络列表、连接有密码或者无密码的网络等等,android为wifi操作提供了很多接口,在此简单总结一下所用的类和代码中使用的主要的方法(英语渣渣自己翻译的API,凑合看看吧)。

1、 ScanResult
主要用来描述已检测出来的接入点。

变量名 简介 BSSID 接入点地址 SSID 网络名称 capabilties 通过接入点描述身份鉴定、密钥管理及加密方案 frequency 客户端与此接入点通信的频率 level 信号强度 timestamp 时间同步功能 方法名 返回值 简介 toString() String 将其返回一个String类型的值

2、WifiInfo
连接的wifi信息描述。

方法名 返回值 简介 getBSSID() String 得到当前接入点的地址 getSSID() String 获得当前接入点名称 getNerworkId() int 获得已配制好的网络的ID

3、WifiConfiguration
代表配置好的wifi,包括安全验证。
wifi有三种安全模式:无密码、WEP和WPA三种(简单了解可达链接 wifi三种安全模式),设置均不一样,具体在代码中createWifiInfo方法实现。

变量名 简介 SSID 网络名 networkId 配置好的网络的ID allowedAuthAlgorithms 该配置的身份鉴定协议集 allowedGroupCiphers 该配置的组群密钥 allowedKeyManagement 该配置的密钥管理协议集 allowedPairwiseCiphers 该配置的WPA成对密码集 allowedProtocols 该配置的安全协议集 hiddenSSID 是否隐藏SSID preShareKey WPA加密时,保存密码的变量 status 网络配置的当前状态 wepKeys String[]类型,最多保存4个WEP密钥 wepTxKeyIndex WEP密钥索引

3、WifiManage

方法名 返回值 简介 getConnectionInfo() WifiInfo 得到当前连接的Wifi信息 addNetwork(WifiConfiguration config) int 增加一个已配置好的网络config,返回-1则是失败 startScan() boolean 提出扫描接入点请求 getScanResults() List 得到最新的可连接点列表 getConfiguredNetworks() List 返回所有已配置网络集合 isWifiEnabled() boolean 判断wifi是否打开 setWifiEnabled(boolean enabled) boolean 设置wifi打开状态 enableNetwork (int netId, boolean disableOthers) boolean 连接一个网络,可选择禁用其他网络 disableNetwork (int netId) boolean netId为addNetwork的返回值,禁用这个网络 getWifiState() int 得到wifi状态 removeNetwork(int netId) boolean 已配置网络列表中删除此网络

开发实例

下面提供一个功能较为完善的wifi开发例子:
下载地址为 http://download.csdn.net/detail/u010738604/9050129
演示效果:
演示效果

我将判断以及连接wifi的各种方法操作均封装在了WifiAdmin类中,关键代码如下:

public class WifiAdmin {    // 定义WifiManager对象        public WifiManager mWifiManager;        // 定义WifiInfo对象        public WifiInfo mWifiInfo;        // 扫描出的网络连接列表        public List<ScanResult> mWifiList;        // 网络连接列表        public List<WifiConfiguration> mWifiConfiguration;        // 定义一个WifiLock        WifiLock mWifiLock;        public WifiAdmin(Context context){            mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);            System.out.println("mWifiManager="+mWifiManager);            // 取得WifiInfo对象            mWifiInfo = mWifiManager.getConnectionInfo();        }        public WifiConfiguration checkWiFiConfig(String str) {            for (WifiConfiguration C : mWifiConfiguration) {                if (C.SSID.equals("\"" +str+ "\"")) {                    return C;                }            }            return null;        }        public void getWifiList() {            // mWifiManager.;            mWifiManager.startScan();            // 得到扫描结果            mWifiList = mWifiManager.getScanResults();            System.out.println("mWifiList="+mWifiList);            // 得到配置好的网络连接            mWifiConfiguration = mWifiManager.getConfiguredNetworks();        }        // 打开WIFI        public void openWifi() {            if (!mWifiManager.isWifiEnabled()) {                mWifiManager.setWifiEnabled(true);            }        }        // 得到WifiInfo的所有信息包        public String getWifiInfo() {            return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();        }        // 关闭WIFI        public void closeWifi() {            if (mWifiManager.isWifiEnabled()) {                mWifiManager.setWifiEnabled(false);            }        }        // 指定配置好的网络进行连接        public void connectConfiguration(int index) {            // 索引大于配置好的网络索引返回            if (index > mWifiConfiguration.size()) {                return;            }            // 连接配置好的指定ID的网络            mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,                    true);        }        // 检查当前WIFI状态        public int checkState() {            return mWifiManager.getWifiState();        }        public WifiConfiguration IsExsits(String SSID) {            List<WifiConfiguration> existingConfigs = mWifiManager                    .getConfiguredNetworks();            for (WifiConfiguration existingConfig : existingConfigs) {                if (existingConfig.SSID.equals("\"" + SSID + "\"")) {                    return existingConfig;                }            }            return null;        }        //验证wifi密码,如果成功则返回一个配置好的WIFI信息        public WifiConfiguration createWifiInfo(String SSID, String Password,                int Type) {            //Log.v(TAG, "SSID = " + SSID + "## Password = " + Password + "## Type = " + Type);            System.out.println("SSID = " + SSID + "## Password = " + Password + "## Type = " + Type);            if (SSID == null || Password == null || SSID.equals("")) {                //Log.e(TAG, "addNetwork() ## nullpointer error!");                System.out.println("addNetwork() ## nullpointer error!");                return null;            }            WifiConfiguration config = new WifiConfiguration();            config.allowedAuthAlgorithms.clear();            config.allowedGroupCiphers.clear();            config.allowedKeyManagement.clear();            config.allowedPairwiseCiphers.clear();            config.allowedProtocols.clear();            config.SSID = "\"" + SSID + "\"";            WifiConfiguration tempConfig = isExsits(SSID, mWifiManager);            if (tempConfig != null) {                mWifiManager.removeNetwork(tempConfig.networkId);            }            if (Type == 1) // WIFICIPHER_NOPASS            {                config.wepKeys[0] = "";                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);                config.wepTxKeyIndex = 0;            }            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;            }            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;        }        /**         * 判断wifi是否存在         *          * @param SSID         * @param wifiManager         * @return         */        public static WifiConfiguration isExsits(String SSID,                WifiManager wifiManager) {            List<WifiConfiguration> existingConfigs = wifiManager                    .getConfiguredNetworks();            for (WifiConfiguration existingConfig : existingConfigs) {                if (existingConfig.SSID.equals("\"" + SSID + "\"")) {                    return existingConfig;                }            }            return null;        }        public boolean ifConfigured(String ssid, WifiManager mWifiManager2) {            // TODO Auto-generated method stub            if(isExsits(ssid, mWifiManager2) != null)                return true;            return false;        }}
1 0
原创粉丝点击