了解WiFi入门

来源:互联网 发布:jre 8u91 windows x32 编辑:程序博客网 时间:2024/04/28 16:38

                                                                                                                                    WiFi

1.接收Wifi的反馈,并没有找到系统提供的接口,这里使用的是通过接收不同的广播来进行判断wifi的连接结果;

private WifiManager mWifiManager;
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);




2.
  1. //开启WIFI  
  2. public void WifiOpen(){  
  3.     if(!localWifiManager.isWifiEnabled()){  
  4.         localWifiManager.setWifiEnabled(true);  
  5.     }  
  6. }  

判断wifi状态

wifiManager.isWifiEnabled():开启

!wifiManager.isWifiEnabled():关闭


3.

  1. //扫描wifi  
  2. public void WifiStartScan(){  
  3.     localWifiManager.startScan();  
  4. }  




4.得到WIFi的配置好的信息,包含配置好的密码

  1. //得到扫描WIFI结果  
  2. public List<ScanResult> getScanResults(){  
  3.     return localWifiManager.getScanResults();//得到扫描结果  
  4. }  




5.根据WIFI的名称SSID判定指定WIFI是否已经配置好,配置好则返回其networkId,用于连接。之前尝试了BSSID地址没成功,所以只能使用SSID

  1. 得到Wifi配置好的信息  
  2. public void getConfiguration(){  
  3.     wifiConfigList = localWifiManager.getConfiguredNetworks();//得到配置好的网络信息  
  4.     for(int i =0;i<wifiConfigList.size();i++){  
  5.         Log.i("getConfiguration",wifiConfigList.get(i).SSID);  
  6.         Log.i("getConfiguration",String.valueOf(wifiConfigList.get(i).networkId));  
  7.     }  
  8. }  


6.

  1. //判定指定WIFI是否已经配置好,依据WIFI的地址BSSID,返回NetId  
  2. public int IsConfiguration(String SSID){  
  3.     Log.i("IsConfiguration",String.valueOf(wifiConfigList.size()));  
  4.     for(int i = 0; i < wifiConfigList.size(); i++){  
  5.         Log.i(wifiConfigList.get(i).SSID,String.valueOf( wifiConfigList.get(i).networkId));  
  6.         if(wifiConfigList.get(i).SSID.equals(SSID)){//地址相同  
  7.             return wifiConfigList.get(i).networkId;  
  8.         }  
  9.     }  
  10.     return -1;  
  11. }  




7.如果需要连接的WIFI没有配置好,即没有保存密码。则为指定名称ssid的WIFI添加密码信息psw,添加成功后返回给其分配的networId,同于连接

  1. //添加指定WIFI的配置信息,原列表不存在此SSID  
  2. public int AddWifiConfig(List<ScanResult> wifiList,String ssid,String pwd){  
  3.     int wifiId = -1;  
  4.     for(int i = 0;i < wifiList.size(); i++){  
  5.         ScanResult wifi = wifiList.get(i);  
  6.         if(wifi.SSID.equals(ssid)){  
  7.             Log.i("AddWifiConfig","equals");  
  8.             WifiConfiguration wifiCong = new WifiConfiguration();  
  9.             wifiCong.SSID = "\""+wifi.SSID+"\"";//\"转义字符,代表"  
  10.             wifiCong.preSharedKey = "\""+pwd+"\"";//WPA-PSK密码  
  11.             wifiCong.hiddenSSID = false;  
  12.             wifiCong.status = WifiConfiguration.Status.ENABLED;  
  13.             wifiId = localWifiManager.addNetwork(wifiCong);//将配置好的特定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1  
  14.             if(wifiId != -1){  
  15.                 return wifiId;  
  16.             }  
  17.         }  
  18.     }  
  19.     return wifiId;  
  20. }  



8.根据步骤6配置好需要连接的WIFI密码信息后,下面通过networkId连接指定WIFI。在连接经过步骤6刚添加配置信息的WIFI信号之前需要重新执行下步骤4,得到新的配置好信息的列表

  1. //连接指定Id的WIFI  
  2. public boolean ConnectWifi(int wifiId){  
  3.     for(int i = 0; i < wifiConfigList.size(); i++){  
  4.         WifiConfiguration wifi = wifiConfigList.get(i);  
  5.         if(wifi.networkId == wifiId){  
  6.             while(!(localWifiManager.enableNetwork(wifiId, true))){//激活该Id,建立连接  
  7.                 //status:0--已经连接,1--不可连接,2--可以连接  
  8.                 Log.i("ConnectWifi",String.valueOf(wifiConfigList.get(wifiId).status));  
  9.             }  
  10.             return true;  
  11.         }  
  12.     }  
  13.     return false;  
  14. }  


判断wifi是否加密

String descOri = list.get(position).capabilities;
            if (descOri.toUpperCase().contains("WPA-PSK")
                    || descOri.toUpperCase().contains("WPA2-PSK")
                    || descOri.toUpperCase().contains("WPA2")) {
            //加密
                }
            } else {
              //开放
            }
            return view;
        }



权限:

  1. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission><!-- 允许程序改变网络链接状态 -->  
  2. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!--允许程序访问访问WIFI网络状态信息  -->  
  3. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!-- 允许程序改变WIFI链接状态 -->  
  4. <uses-permission android:name="android.permission.INTERNET"></uses-permission> 

0 0