Android_wifi属性及其设置

来源:互联网 发布:thinkphp5 子域名部署 编辑:程序博客网 时间:2024/06/05 00:28

Android开发中WiFi热点和WiFi属性的获取会经常被用到,下面就来记录下WiFi的名称、状态等属性以及获取周围WiFi热点的方法。

一、获取wifi属性

要获得Android系统相关的属性,通常需要获得相关的系统服务。在Android中最常用的是通过Manager来获得对对象的操作服务。WiFi相关的操作中需要用到两个Manager:WifiManager和ConnectivityManage:

 

[java] viewplaincopy
  1. public WifiManager wifiManager;             //管理wifi  
  2. public ConnectivityManager connectManager;              //管理网络连接  
[java] viewplaincopy
  1. wifiManager (WifiManager) getSystemService(WIFI_SERVICE);        //获得系统wifi服务  
  2. connectManager (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);  

 

获得服务后,即可得到对象进而获得相关属性:

 

[java] viewplaincopy
  1. public NetworkInfo netInfo;                 //网络连接  
  2. public WifiInfo wifiInfo;                   //wifi  
  3. public DhcpInfo dhcpInfo;"white-space:pre"                  //动态主机配置协议信息的对象,获得IP等网关信息  
网络信息的获取:

 

 

[java] viewplaincopy
  1. "code" class="java">netInfo connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);  
  2. dhcpInfo wifiManager.getDhcpInfo();  
  3. wifiInfo wifiManager.getConnectionInfo();  

 

 

 

要获得wifi相关的网络信息,必须设定网络类型参数:ConnectivityManager.TYPE_WIFI.下面就可以获得需要的信息,例如当前连接wifi的名称等等属性,即SSID:

 

[java] viewplaincopy
  1. wifiInfo.getSSID();  
还要获得当前连接wifi网络的ip、mask、netgate、dns等信息,则需要如下实现:

 

 

[java] viewplaincopy
  1. String wifiProperty "当前连接Wifi信息如下:"+wifiInfo.getSSID()+'\n' 
  2.                 "ip:"         FormatString(dhcpInfo.ipAddress)   +'\n' 
  3.                 "mask:"       FormatString(dhcpInfo.netmask)     +'\n' 
  4.                 "netgate:"    FormatString(dhcpInfo.gateway)     +'\n' 
  5.                 "dns:"        FormatString(dhcpInfo.dns1)   
其中dhcpInfo属性的值为int型,要转换成通常见到的32位地址则需要转换方法:

 

 

[java] viewplaincopy
  1. public String FormatString(int value){  
  2.         String strValue="" 
  3.         byte[] ary intToByteArray(value);  
  4.         for(int i=ary.length-1;i>=0;i--){  
  5.                 strValue += (ary[i] 0xFF);  
  6.                 if(i>0){  
  7.                         strValue+="." 
  8.                  
  9.          
  10.         return strValue;  
  11.      
  12. public  byte[] intToByteArray(int value){  
  13.         byte[] new byte[4];  
  14.          for (int 04i++){  
  15.                 int offset (b.length 1 i) 8 
  16.                  b[i] (byte((value >>> offset) 0xFF);  
  17.            
  18.           return b;  
  19.      
上述方法即可获得wifi网络相关的信息,根据需要来选择方法。

 

二、获取周围WiFi热点

wifiManager提供了一个方法getScanResults()来获得周围的wifi信息,其返回的是一组ScanResult对象,存放在list当中,每个ScanResult对象封装了一个wifi热点相关信息,通过ScanResult对象的属性即可获取到,最常用的两个属性为wifi名称(SSID)和信号强度(level):

 

[java] viewplaincopy
  1. ArrayList list;                   //存放周围wifi热点对象的列表  
  2. list (ArrayList) wifiManager.getScanResults();  
通常我们会根据所搜索到的wifi信号的强度level从强到弱进行排序并显示在列表上:

 

 

[html] viewplaincopy
  1. //将搜索到的wifi根据信号强度从强到弱进行排序  
  2. private void sortByLevel(ArrayList<</span>ScanResult> list)  
  3.         for(int i=0;i<</span>list.size();i++)  
  4.             for(int j=1;j<</span>list.size();j++)  
  5.              
  6.                 if(list.get(i).level<</span>list.get(j).level)    //level属性即为强度  
  7.                  
  8.                     ScanResult temp null 
  9.                     temp list.get(i);  
  10.                     list.set(i, list.get(j));  
  11.                     list.set(j, temp);  
  12.                  
  13.              
  14.      
ScanResult的信号强度属性level是负值,因为它是以分贝数来计算的。然后根据你自己的需求创建相应的Adapter将其显示在ListView上。上述方法搜索到的wifi很多,你还可以加上动态更新、wifi过滤等功能进行显示。

 

如果要对wifi状态,网络连接状态进行判断等操作,不要忘了很重要的一点,就是在AndroidManifest.xml里添加权限:

 

[html] viewplaincopy
  1. <</span>uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></</span>uses-permission>      
  2. <</span>uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></</span>uses-permission>      
  3. <</span>uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></</span>uses-permission>      
  4. <</span>uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></</span>uses-permission>  
0 0
原创粉丝点击