Android开发周围wifi热点和属性的获取
2014-12-01 15:52
686 查看
Android开发中WiFi热点和WiFi属性的获取会经常被用到,下面就来记录下WiFi的名称、状态等属性以及获取周围WiFi热点的方法。
一、获取wifi属性
要获得Android系统相关的属性,通常需要获得相关的系统服务。在Android中最常用的是通过Manager来获得对对象的操作服务。WiFi相关的操作中需要用到两个Manager:WifiManager和ConnectivityManage:
[java] view
plaincopy
public WifiManager wifiManager; //管理wifi
public ConnectivityManager connectManager; //管理网络连接
[java] view
plaincopy
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); //获得系统wifi服务
connectManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
获得服务后,即可得到对象进而获得相关属性:
[java] view
plaincopy
public NetworkInfo netInfo; //网络连接
public WifiInfo wifiInfo; //wifi
public DhcpInfo dhcpInfo;<span style="white-space:pre"> //动态主机配置协议信息的对象,获得IP等网关信息
网络信息的获取:
[java] view
plaincopy
<pre name="code" class="java">netInfo = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
dhcpInfo = wifiManager.getDhcpInfo();
wifiInfo = wifiManager.getConnectionInfo();
要获得wifi相关的网络信息,必须设定网络类型参数:ConnectivityManager.TYPE_WIFI.下面就可以获得需要的信息,例如当前连接wifi的名称等等属性,即SSID:
[java] view
plaincopy
wifiInfo.getSSID();
还要获得当前连接wifi网络的ip、mask、netgate、dns等信息,则需要如下实现:
[java] view
plaincopy
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位地址则需要转换方法:
[java] view
plaincopy
public String FormatString(int value){
String strValue="";
byte[] ary = intToByteArray(value);
for(int i=ary.length-1;i>=0;i--){
strValue += (ary[i] & 0xFF);
if(i>0){
strValue+=".";
}
}
return strValue;
}
public byte[] intToByteArray(int value){
byte[] b = new byte[4];
for (int i = 0; i < 4; i++){
int offset = (b.length - 1 - i) * 8;
b[i] = (byte) ((value >>> offset) & 0xFF);
}
return b;
}
上述方法即可获得wifi网络相关的信息,根据需要来选择方法。
二、获取周围WiFi热点
wifiManager提供了一个方法getScanResults()来获得周围的wifi信息,其返回的是一组ScanResult对象,存放在list当中,每个ScanResult对象封装了一个wifi热点相关信息,通过ScanResult对象的属性即可获取到,最常用的两个属性为wifi名称(SSID)和信号强度(level):
[java] view
plaincopy
ArrayList<ScanResult> list; //存放周围wifi热点对象的列表
list = (ArrayList<ScanResult>) wifiManager.getScanResults();
通常我们会根据所搜索到的wifi信号的强度level从强到弱进行排序并显示在列表上:
[html] view
plaincopy
//将搜索到的wifi根据信号强度从强到弱进行排序
private void sortByLevel(ArrayList<ScanResult> list) {
for(int i=0;i<list.size();i++)
for(int j=1;j<list.size();j++)
{
if(list.get(i).level<list.get(j).level) //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里添加权限:
[html] view
plaincopy
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
一、获取wifi属性
要获得Android系统相关的属性,通常需要获得相关的系统服务。在Android中最常用的是通过Manager来获得对对象的操作服务。WiFi相关的操作中需要用到两个Manager:WifiManager和ConnectivityManage:
[java] view
plaincopy
public WifiManager wifiManager; //管理wifi
public ConnectivityManager connectManager; //管理网络连接
[java] view
plaincopy
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); //获得系统wifi服务
connectManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
获得服务后,即可得到对象进而获得相关属性:
[java] view
plaincopy
public NetworkInfo netInfo; //网络连接
public WifiInfo wifiInfo; //wifi
public DhcpInfo dhcpInfo;<span style="white-space:pre"> //动态主机配置协议信息的对象,获得IP等网关信息
网络信息的获取:
[java] view
plaincopy
<pre name="code" class="java">netInfo = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
dhcpInfo = wifiManager.getDhcpInfo();
wifiInfo = wifiManager.getConnectionInfo();
要获得wifi相关的网络信息,必须设定网络类型参数:ConnectivityManager.TYPE_WIFI.下面就可以获得需要的信息,例如当前连接wifi的名称等等属性,即SSID:
[java] view
plaincopy
wifiInfo.getSSID();
还要获得当前连接wifi网络的ip、mask、netgate、dns等信息,则需要如下实现:
[java] view
plaincopy
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位地址则需要转换方法:
[java] view
plaincopy
public String FormatString(int value){
String strValue="";
byte[] ary = intToByteArray(value);
for(int i=ary.length-1;i>=0;i--){
strValue += (ary[i] & 0xFF);
if(i>0){
strValue+=".";
}
}
return strValue;
}
public byte[] intToByteArray(int value){
byte[] b = new byte[4];
for (int i = 0; i < 4; i++){
int offset = (b.length - 1 - i) * 8;
b[i] = (byte) ((value >>> offset) & 0xFF);
}
return b;
}
上述方法即可获得wifi网络相关的信息,根据需要来选择方法。
二、获取周围WiFi热点
wifiManager提供了一个方法getScanResults()来获得周围的wifi信息,其返回的是一组ScanResult对象,存放在list当中,每个ScanResult对象封装了一个wifi热点相关信息,通过ScanResult对象的属性即可获取到,最常用的两个属性为wifi名称(SSID)和信号强度(level):
[java] view
plaincopy
ArrayList<ScanResult> list; //存放周围wifi热点对象的列表
list = (ArrayList<ScanResult>) wifiManager.getScanResults();
通常我们会根据所搜索到的wifi信号的强度level从强到弱进行排序并显示在列表上:
[html] view
plaincopy
//将搜索到的wifi根据信号强度从强到弱进行排序
private void sortByLevel(ArrayList<ScanResult> list) {
for(int i=0;i<list.size();i++)
for(int j=1;j<list.size();j++)
{
if(list.get(i).level<list.get(j).level) //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里添加权限:
[html] view
plaincopy
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
相关文章推荐
- Android盒子开发,获取网络的信息(热点,WIFI,有线)
- Android获取周围WIFI热点服务
- Android wifi属性简介 及 wifi信息获取(wifi列表、配置信息、热点信息),androidwifi
- Android wifi属性简介 及 wifi信息获取(wifi列表、配置信息、热点信息)
- Android连续获取当前所连接WiFi及周围热点列表信息的解决方案
- android获取周围WIFI热点
- Android wifi通信 开发(wifi列表 +连接具体的wifi热点+socket的获取) 之 解决热点连成功的时延问题
- [置顶] Android WiFi开发 (二)Wifi热点
- Android开发之扫描附近wifi热点并列表显示
- Android开发获取GPS位置,包含apn\wifi\gps 几种方法
- Android网络相关(WiFi的开关,WiFi热点的开关,获取手机IP地址等)
- Android开发获取GPS位置,包含基站\wifi\gps 几种方法
- Android framework开发全局系统属性设置与获取
- android开发 获取WIFI和有线的IP地址
- Android系统信息获取 之十四:获取WIFI热点相关信息
- android 如何获取连接wifi热点的设备数量
- android开发获取网络状态,wifi,wap,2g,3g.工具类(一)
- ios开发 如何在应用内获取当前周围wifi列表和强度 并实现在应用内控制wifi开关
- Android-NDK开发之基础--Android JNI实例代码(二)-- 获取/设置类的域或者说属性字段
- android开发步步为营之48:通过WifiManager自动连上某个wifi热点