工作随笔---WiFi开发(2)---WIFIUtil类

来源:互联网 发布:好的淘宝零食点知乎 编辑:程序博客网 时间:2024/06/07 23:50

1.前言

上篇讲到注册相关的BroadcastReceiver以及通过BroadcastReceiver来获取WIFI的各种通知,本篇接着上一篇来解析WIFI开发的过程,现在我们需要新建操作WIFI的工具类SysManagerWIFIUtil.java.

2.开发流程

通过调用WifiManager.java中的源生接口,来封装一些符合自己需求的接口。

    private static final String TAG = “WIFIUtil”;    private static SysManagerWIFIUtil m_instance = null;    private WifiManager mWifiManager;    private WifiInfo mWifiInfo;    // scanedAPList    private List<ScanResult> mWifiList;    // savedAPList    private List<WifiConfiguration> mWifiConfiguration;    private static Context m_context;    public static final int TYPE_NO_SECURITY = 1;    public static final int TYPE_WEP = 2;    public static final int TYPE_WPAWPA2 = 3;    public static final int WIFI_CONNECTED = 0x01;    public static final int WIFI_CONNECT_FAILED = 0x02;    public static final int WIFI_CONNECTING = 0x03;    private SysManagerWIFIUtil(Context context) {        m_context = context;        //构造方法中获取wifimanager        mWifiManager = (WifiManager) context                .getSystemService(Context.WIFI_SERVICE);    }    public static SysManagerWIFIUtil getInstance(Context context) {        if (null == m_instance) {            SysLog.out(TAG, "SysManagerWIFIUtil getInstance", "create singleton instance");            synchronized (SysManagerWIFIUtil.class) {                if (null == m_instance) {                    m_instance = new SysManagerWIFIUtil(context);                }            }        }        return m_instance;    }    //打开wifi开关    public void openWifi() {        if (!mWifiManager.isWifiEnabled()) {            mWifiManager.setWifiEnabled(true);        }    }    //关闭wifi开关    public void closeWifi() {        if (mWifiManager.isWifiEnabled()) {            mWifiManager.setWifiEnabled(false);        }    }    //ckeck wifi的状态    //WifiManager.WIFI_STATE_ENABLED    //WifiManager.WIFI_STATE_DISABLED    //WifiManager.WIFI_STATE_DISABLING     //WifiManager.WIFI_STATE_ENABLING    //WifiManager.WIFI_STATE_UNKNOWN    public int checkState() {        return mWifiManager.getWifiState();    }    public WifiManager getWifiManager() {        return mWifiManager;    }    //获取已连接并保存的热点列表    public synchronized List<WifiConfiguration> getConfiguration() {        // saved AP        mWifiConfiguration = mWifiManager.getConfiguredNetworks();        return mWifiConfiguration;    }    //当前正在连接的热点的信息    public synchronized WifiInfo getConnectionInfo() {        mWifiInfo = mWifiManager.getConnectionInfo();        // SysLog.out(TAG, "connect", "" + mWifiInfo.toString());        return mWifiInfo;    }    // connect savedAP    public boolean connectConfiguration(int netid) {        if (netid < -1) {            return false;        }        SysLog.out(TAG, "SysManagerWIFIUtil enableNetwork", "start");        boolean c = mWifiManager.enableNetwork(netid, true);        return c;    }    //连接成功热点或者删除热点时需要重新保存下configuration信息    public synchronized void saveConfiguration() {        SysLog.out(TAG, "SysManagerWIFIUtil saveConfiguration", "start");        mWifiManager.saveConfiguration();    }    //检索周围热点    public synchronized void startScan() {        SysLog.out(TAG, "SysManagerWIFIUtil startScan", "start");        mWifiManager.startScan();    }    /*     * @TODO when connect hidden AP,should use this method,and set ifActive=true    * @param ifActive    */    public synchronized void startActiveScan(boolean ifActive) {        SysLog.out(TAG, "SysManagerWIFIUtil startActiveScan", "start");        mWifiClient.startScan(ifActive);    }    //获取周围最新的scan到的热点列表    public synchronized List<ScanResult> getWifiList() {        // scaned AP        mWifiList = mWifiManager.getScanResults();        return mWifiList;    }    //获取当前正在连接的热点的MAC    public synchronized String getMacAddress() {        if (mWifiManager.isWifiEnabled()) {            mWifiInfo = mWifiManager.getConnectionInfo();            return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();        }        return null;    }    //获取当前正在连接的热点的BSSID    public synchronized String getBSSID() {        if (mWifiManager.isWifiEnabled()) {            mWifiInfo = mWifiManager.getConnectionInfo();            return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();        }        return "";    }    //获取当前正在连接的热点的SSID    public synchronized String getSSID() {        if (mWifiManager.isWifiEnabled()) {            mWifiInfo = mWifiManager.getConnectionInfo();            return (mWifiInfo == null) ? "NULL" : mWifiInfo.getSSID();        }        return "";    }    //获取已保存热点的加密方式    public synchronized int getSecurityType(WifiConfiguration config) {        if ((config.allowedKeyManagement.get(KeyMgmt.WPA_EAP)                    || config.allowedKeyManagement.get(KeyMgmt.WPA_PSK)                     || config.allowedKeyManagement.get(KeyMgmt.IEEE8021X))) {            SysLog.out(TAG, "SysManagerWIFIAdmin getSecurityType", "security = TYPE_WPAWPA2");            return TYPE_WPAWPA2;        }        return (config.wepKeys[0] != null) ? TYPE_WEP : TYPE_NO_SECURITY;    }    //获取当前正在连接的热点的IP    public synchronized int getIPAddress() {        if (mWifiManager.isWifiEnabled()) {            mWifiInfo = mWifiManager.getConnectionInfo();            return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();        }        return 0;    }    //获取当前正在连接的热点的networkId    public synchronized int getNetworkId() {        if (mWifiManager.isWifiEnabled()) {            mWifiInfo = mWifiManager.getConnectionInfo();            return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();        }        return 0;    }    //通过netid删除已保存的热点    public synchronized boolean deleteConfiguration(int netId) {        SysLog.out(TAG, "SysManagerWIFIUtil deleteConfiguration", "start");        boolean b = mWifiManager.removeNetwork(netId);        return b;    }    public synchronized int addNetwork(String ssid, String passwd, int type,            String bssid) {        SysLog.out(TAG, "SysManagerWIFIUtil addNetwork", "start");        int status = addNetwork(CreateWifiInfo(ssid, passwd, type, bssid));        return status;    }    // 连接新的热点    private int addNetwork(WifiConfiguration wcg) {        int wcgID = mWifiManager.addNetwork(wcg);        SysLog.out(TAG, "SysManagerWIFIUtil addNetwork(enableNetwork)",                "start"+", netID = "+wcgID);        boolean b = mWifiManager.enableNetwork(wcgID, true);        getConnectionInfo();        return wcgID;    }    //创建将要连接的新热点信息    private WifiConfiguration CreateWifiInfo(String SSID, String Password,            int Type, String BSSID) {        WifiConfiguration config = new WifiConfiguration();        config.allowedAuthAlgorithms.clear();        config.allowedGroupCiphers.clear();        config.allowedKeyManagement.clear();        config.allowedPairwiseCiphers.clear();        config.allowedProtocols.clear();        config.SSID =  toHexString(SSID.getBytes());        SysLog.out(TAG, "SysManagerWIFIUtil addNetwork", "SSID="+config.SSID);        //if (null == BSSID) {        //} else {        //  config.BSSID = BSSID;        //}        //if ((null != SSID)&&(null != BSSID)) {        //  WifiConfiguration tempConfig = this.IsExsits(SSID,BSSID);        //  if (tempConfig != null) {        //      mWifiManager.removeNetwork(tempConfig.networkId);        //  }        //}        if (TYPE_NO_PASSWD == Type) // WIFICIPHER_NOPASS        {            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);        } else if (TYPE_WEP == Type) { // WIFICIPHER_WEP            config.hiddenSSID = true;            int len = Password.length();            if ((len == 10 || len == 26 || len == 58)                    && Password.matches("[0-9A-Fa-f]*")) {                config.wepKeys[0] = Password;            } else {                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;        } else if (TYPE_WPA == Type) { // WIFICIPHER_WPA            if (Password.matches("[0-9A-Fa-f]{64}")) {                config.preSharedKey = Password;            } else {                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.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);            config.allowedPairwiseCiphers                    .set(WifiConfiguration.PairwiseCipher.CCMP);            config.status = WifiConfiguration.Status.ENABLED;        } else {        }        return config;    }    //启动wps连接    public void startWps(WpsInfo config, WpsListener listener){        mWifiManager.startWps(config, listener);    }    //取消wps连接    public void cancelWps(ActionListener listener){        mWifiManager.cancelWps(listener);    }    //当前wifi是否已经连接    public int isWifiContected(Context context) {        ConnectivityManager connectivityManager = (ConnectivityManager) context                .getSystemService(Context.CONNECTIVITY_SERVICE);        NetworkInfo wifiNetworkInfo = connectivityManager                .getNetworkInfo(ConnectivityManager.TYPE_WIFI);        if (wifiNetworkInfo.isConnected()) {            return WIFI_CONNECTED;        } else {            return WIFI_CONNECT_FAILED;        }    }    //判断当前热点是否已经存在于保存列表    public WifiConfiguration IsExsits(String SSID,String BSSID) {        List<WifiConfiguration> existingConfigs = mWifiManager                .getConfiguredNetworks();        for (WifiConfiguration existingConfig : existingConfigs) {            if (null != BSSID && (("\"" + SSID + "\"").equals(existingConfig.SSID))                &&(BSSID.equals(existingConfig.BSSID))) {                return existingConfig;            }        }        return null;    }    //断开指定的已连接的热点    public synchronized void disconnectWifi(int netId) {        mWifiManager.disableNetwork(netId);        if(netId == getNetworkId()){            mWifiManager.disconnect();            SysLog.out(TAG, "SysManagerWIFIUtil disconnectWifi(netID)",                    "Ap is disconnect = "+netId);        }    }    /**     * signalLevel divide     * @param level     * @param num     * @return signal level(0~4)     */    public int calculateSignalLevel(int level, int num) {        if (level <= -100) {            return 0;        } else if (level >= -55) {            return num - 1;        } else {            float inputRange = ((-55) - (-100));            float outputRange = num - 1;            return (int) ((float) (level - (-100)) * outputRange / inputRange);        }    }    /**     *@TODO  judge ssid whether invisible     * @param ssid     * @return boolean     */    public  boolean judgeSSID(String ssid) {        char[] contentCharArr = ssid.toCharArray();        for (int i = 0; i < contentCharArr.length; i++) {            if (contentCharArr[i] <= 0x20 || contentCharArr[i] == 0x7F) {            } else {                return true;            }        }        return false;    }    /**     * @TODO 将周边检索的热点的加密方式简化     * @param capabilities     * @return     */    public int wifiType(String capabilities) {        if (capabilities.contains("[WPA2-") || capabilities.contains("[WPA-")) {            return TYPE_WPAWPA2;        } else if (capabilities.contains("WEP")) {            return TYPE_WEP;        } else {            return TYPE_NO_SECURITY;        }    }    /**     * switch IP Address     * @param ipAddress     * @return String     */    public String intToIp(int ipAddress) {        return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)                + "." + (i >> 24 & 0xFF);    }
0 0
原创粉丝点击