我是靠谱客的博主 大胆丝袜,最近开发中收集的这篇文章主要介绍Android之Wifi模块开发,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    • 接口简介
    • 开发实例

接口简介

因为项目需要,所以完成了一个简单的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
preShareKeyWPA加密时,保存密码的变量
status网络配置的当前状态
wepKeysString[]类型,最多保存4个WEP密钥
wepTxKeyIndexWEP密钥索引

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)booleannetId为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;
        }

}

最后

以上就是大胆丝袜为你收集整理的Android之Wifi模块开发的全部内容,希望文章能够帮你解决Android之Wifi模块开发所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部