您的位置:首页 > 移动开发 > Android开发

Android编程实现连接Wifi(运用Wifi 相关 API)

2012-08-02 16:49 531 查看
原地址:http://blog.csdn.net/cscmaker/article/details/7032277

最近,由于作业要求要做一个android应用。其中一个功能模块是通过程序来实现wifi的自动连接。之前没有接触过android,但是以前用过java(菜鸟级)……呵呵,扯远了。

       这两天对android的wifi功能研究了一下。下面共享出自己封装的WifiConnect类。(这里参考了ZXing开源项目中wifi模块)

       首先,要了解android关于wifi的API.

       如果你喜欢看English API,这是android关于wifi的API地址:

http://developer.android.com/reference/android/net/wifi/package-summary.html(配置Wifi,还需要设定权限,android中关于wifi的API文档中说明了要添加什么权限)

       如果你一看英语就头疼,这里有关于wifi的api的中文解释

http://note.sdo.com/u/1500295617/n/prb71~jGAHfpnM0l000bgN

       切入正题,这里贴出一个封装了的类(WifiConnect),在实例化WifiConnect对象时,需要传入一个WifiManager对象。WifiConnect类向外部提供一个Connect方法,参数是无线的SSID,password,还有加密类型。

[java] view
plaincopy

/* 

 *  WifiConnect.java 

 *  Author: cscmaker 

 */  

package com.wifi.connect;  

  

import java.util.List;  

  

import android.net.wifi.WifiConfiguration;  

import android.net.wifi.WifiManager;  

import android.util.Log;  

  

public class WifiConnect {  

  

    WifiManager wifiManager;  

      

//定义几种加密方式,一种是WEP,一种是WPA,还有没有密码的情况  

    public enum WifiCipherType  

    {  

      WIFICIPHER_WEP,WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID  

    }  

      

//构造函数  

    public WifiConnect(WifiManager wifiManager)  

    {  

      this.wifiManager = wifiManager;  

    }  

      

//打开wifi功能  

     private boolean OpenWifi()  

     {  

         boolean bRet = true;  

         if (!wifiManager.isWifiEnabled())  

         {  

          bRet = wifiManager.setWifiEnabled(true);    

         }  

         return bRet;  

     }  

      

//提供一个外部接口,传入要连接的无线网  

     public boolean Connect(String SSID, String Password, WifiCipherType Type)  

     {  

        if(!this.OpenWifi())  

        {  

             return false;  

        }  

//开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi  

//状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句  

        while(wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING )  

        {  

             try{  

     //为了避免程序一直while循环,让它睡个100毫秒在检测……  

              Thread.currentThread();  

              Thread.sleep(100);  

            }  

            catch(InterruptedException ie){  

           }  

        }  

         

    WifiConfiguration wifiConfig = this.CreateWifiInfo(SSID, Password, Type);  

        //  

        if(wifiConfig == null)  

        {  

               return false;  

        }  

          

        WifiConfiguration tempConfig = this.IsExsits(SSID);  

          

        if(tempConfig != null)  

        {  

            wifiManager.removeNetwork(tempConfig.networkId);  

        }  

          

      int netID = wifiManager.addNetwork(wifiConfig);  

        boolean bRet = wifiManager.enableNetwork(netID, false);    

        return bRet;  

     }  

       

    //查看以前是否也配置过这个网络  

     private WifiConfiguration IsExsits(String SSID)  

     {  

         List<WifiConfiguration> existingConfigs = wifiManager.getConfiguredNetworks();  

            for (WifiConfiguration existingConfig : existingConfigs)   

            {  

              if (existingConfig.SSID.equals("\""+SSID+"\""))  

              {  

                  return existingConfig;  

              }  

            }  

         return null;   

     }  

       

     private WifiConfiguration CreateWifiInfo(String SSID, String Password, WifiCipherType Type)  

     {  

        WifiConfiguration config = new WifiConfiguration();    

         config.allowedAuthAlgorithms.clear();  

         config.allowedGroupCiphers.clear();  

         config.allowedKeyManagement.clear();  

         config.allowedPairwiseCiphers.clear();  

         config.allowedProtocols.clear();  

        config.SSID = "\"" + SSID + "\"";    

        if(Type == WifiCipherType.WIFICIPHER_NOPASS)  

        {  

             config.wepKeys[0] = "";  

             config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);  

             config.wepTxKeyIndex = 0;  

        }  

        if(Type == WifiCipherType.WIFICIPHER_WEP)  

        {  

            config.preSharedKey = "\""+Password+"\"";   

            config.hiddenSSID = true;    

            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 == WifiCipherType.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.status = WifiConfiguration.Status.ENABLED;    

        }  

        else  

        {  

            return null;  

        }  

        return config;  

     }  

       

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息