android 获取附近热点,Android开发周围wifi热点和属性的获取

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

一、获取wifi属性

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

publicWifiManager wifiManager;//管理wifi

publicConnectivityManager connectManager;//管理网络连接

wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);//获得系统wifi服务

connectManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

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

publicNetworkInfo netInfo;//网络连接

publicWifiInfo wifiInfo;//wifi

publicDhcpInfo dhcpInfo;//动态主机配置协议信息的对象,获得IP等网关信息

网络信息的获取:

netInfo = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

dhcpInfo = wifiManager.getDhcpInfo();

wifiInfo = wifiManager.getConnectionInfo();

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

wifiInfo.getSSID();

还要获得当前连接wifi网络的ip、mask、netgate、dns等信息,则需要如下实现:

String wifiProperty ="当前连接Wifi信息如下:"+wifiInfo.getSSID()+'\n'+

"ip:"+     FormatString(dhcpInfo.ipAddress)   +'\n'+

"mask:"+     FormatString(dhcpInfo.netmask)     +'\n'+

"netgate:"+     FormatString(dhcpInfo.gateway)     +'\n'+

"dns:"+     FormatString(dhcpInfo.dns1)  ;

其中dhcpInfo属性的值为int型,要转换成通常见到的32位地址则需要转换方法:

publicString FormatString(intvalue){

String strValue="";

byte[] ary = intToByteArray(value);

for(inti=ary.length-1;i>=0;i--){

strValue += (ary[i] & 0xFF);

if(i>0){

strValue+=".";

}

}

returnstrValue;

}

publicbyte[] intToByteArray(intvalue){

byte[] b =newbyte[4];

for(inti =0; i <4; i++){

intoffset = (b.length -1- i) *8;

b[i] = (byte) ((value >>> offset) &0xFF);

}

returnb;

}

上述方法即可获得wifi网络相关的信息,根据需要来选择方法。

二、获取周围WiFi热点

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

ArrayList list;//存放周围wifi热点对象的列表

list = (ArrayList) wifiManager.getScanResults();

通常我们会根据所搜索到的wifi信号的强度level从强到弱进行排序并显示在列表上:

//将搜索到的wifi根据信号强度从强到弱进行排序

private void sortByLevel(ArrayListlist) {

for(int i=0;i

for(int j=1;j

{

if(list.get(i).level

{

ScanResult temp=null;

temp=list.get(i);

list.set(i, list.get(j));

list.set(j, temp);

}

}

}

ScanResult的信号强度属性level是负值,因为它是以分贝数来计算的。然后根据你自己的需求创建相应的Adapter将其显示在ListView上。上述方法搜索到的wifi很多,你还可以加上动态更新、wifi过滤等功能进行显示。

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值