Android wifi属性简介 及 wifi信息获取(wifi列表、配置信息、热点信息)
来源:互联网 发布:js获取当前页面url参数 编辑:程序博客网 时间:2024/05/16 11:47
Android wifi对象属性及简易Demo
本章介绍Android开发中WiFi热点和WiFi属性的获取,介绍WiFi的名称、状态等属性以及获取周围WiFi热点的方法。
一、怎样获取wifi对象并进行操作
要操作 WIFI 设备,需要先获取 Context.getSystemService(Context.WIFI_SERVICE)获取WifiManager对象,并通过这个对象来管理WIFI设备。
addNetwork(WifiConfiguration config) 添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DISABLE状态的。calculateSignalLevel(int rssi , int numLevels) 计算信号的等级compareSignalLevel(int rssiA, int rssiB) 对比网络A和网络B的信号强度createWifiLock(int lockType, String tag) 创建一个WIFI 锁,锁定当前的WIFI连接disableNetwork(int netId) 让一个网络连接失效disconnect() 断开当前的WIFI连接enableNetwork(int netId, Boolean disableOthers) 连接netId所指的WIFI网络,并是其他的网络都被禁用getConfiguredNetworks() 获取网络连接的状态getConnectionInfo() 获取当前连接的信息getDhcpInfo() 获取DHCP 的信息getScanResulats() 获取扫描测试的结果getWifiState() 获取当前WIFI设备的状态isWifiEnabled() 判断WIFI设备是否打开pingSupplicant() ping操作,和PC的ping操作相同作用ressociate() 重新连接WIFI网络,即使该网络是已经被连接上的reconnect() 重新连接一个未连接上的WIFI网络removeNetwork() 移除某一个网络saveConfiguration() 保留一个配置信息setWifiEnabled() 让一个连接有效startScan() 开始扫描updateNetwork(WifiConfiguration config) 更新一个网络连接
二、常用的wifi状态
WIFI_STATE_DISABLED //WIFI网卡不可用 WIFI_STATE_DISABLING //WIFI网卡正在关闭 WIFI_STATE_ENABLED //WIFI网卡可用 WIFI_STATE_ENABLING //WIFI网卡正在打开 WIFI_STATE_UNKNOWN //WIFI网卡状态不可知
三、列表查看有连接信号的wifi热点
ScanResult 对象就是用来表示附近 wifi 热点的属性的,可通过 WifiManager.getScanResults() 返回一个ScanResult列表,
ScanResult 的重要属性如下:
1. BSSID接入点的地址
2. SSID网络的名字,唯一区别WIFI网络的名字
3. Capabilities网络接入的性能
4. Frequency当前WIFI设备附近热点的频率(MHz)
5. Level所发现的WIFI网络信号强度
四、连接wifi热点
通过 WifiManager.getConfiguredNetworks() 方法会返回WifiConfiguration对象的列表,然后再调用WifiManager.enableNetwork();方法就可以连接上指定的热点。
五、查看已经连接上的wifi信息
WifiInfo 是专门用来表示连接的对象,这个对象可以通过WifiManager.getConnectionInfo()来获取。
WifiInfo中包含了当前连接中的相关信息。
getBSSID() 获取BSSID属性getDetailedStateOf() 获取客户端的连通性getHiddenSSID() 获取SSID 是否被隐藏getIpAddress() 获取IP 地址getLinkSpeed() 获取连接的速度getMacAddress() 获取Mac 地址getRssi() 获取802.11n 网络的信号getSSID() 获取SSIDgetSupplicanState() 获取具体客户端状态的信息
六、示例
1)获得WifiManager
WifiManager wifiManager=(WifiManager) getSystemService(WIFI_SERVICE);
2)获取Wifi信息
WifiInfo wifiInfo=wifiManager.getConnectionInfo();//当前wifi连接信息 List<ScanResult> scanResults=wifiManager.getScanResults();//搜索到的设备列表 for (ScanResult scanResult : scanResults) { tv.append("\n设备名:"+scanResult.SSID +" 信号强度:"+scanResult.level+"/n :"+wifiManager.calculateSignalLevel(scanResult.level,4)); }
附 WifiManager中计算级别的代码:
/** * Calculates the level of the signal. This should be used any time a signal * is being shown. * @param rssi The power of the signal measured in RSSI. * @param numLevels The number of levels to consider in the calculated * level. * @return A level of the signal, given in the range of 0 to numLevels-1 * (both inclusive). */ public static int calculateSignalLevel(int rssi, int numLevels) { if (rssi <= MIN_RSSI) { return 0; } else if (rssi >= MAX_RSSI) { return numLevels - 1; } else { int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1); return (rssi - MIN_RSSI) / partitionSize; } }
3)网络权限
<!-- 以下是使用wifi访问网络所需的权限 --> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
如:方法封装(返回返回当前连接的wifi的名字)
private String getConnectWifiSsid(){WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);WifiInfo wifiInfo = wifiManager.getConnectionInfo();Log.d("wifiInfo", wifiInfo.toString());Log.d("SSID",wifiInfo.getSSID());return wifiInfo.getSSID();}如果不是想获取当前连接,而是想获取WIFI设置中的连接,可以使用 WifiManager.getConfiguredNetworks
七、获取当前已连接的wifi配置信息
public class MyWifi extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView infoText = (TextView) this.findViewById(R.id.info); infoText.setText(getInfo()); } private String getInfo() { WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); String maxText = info.getMacAddress(); String ipText = intToIp(info.getIpAddress()); String status = ""; if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLED) { status = "WIFI_STATE_ENABLED"; } String ssid = info.getSSID(); int networkID = info.getNetworkId(); int speed = info.getLinkSpeed(); return "mac:" + maxText + "\n\r" + "ip:" + ipText + "\n\r" + "wifi status :" + status + "\n\r" + "ssid :" + ssid + "\n\r" + "net work id :" + networkID + "\n\r" + "connection speed:" + speed + "\n\r" ; } private String intToIp(int ip) { return (ip & 0xFF) + "." + ((ip >> 8) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "." + ((ip >> 24) & 0xFF); } }
八、Android开发周围wifi热点和属性的获取
一、获取wifi属性
获得Android系统相关的属性,通过Manager来获得对对象的操作服务。WiFi相关的操作中需要用到两个Manager:WifiManager和ConnectivityManage:
- public WifiManager wifiManager; //管理wifi
- public ConnectivityManager connectManager; //管理网络连接
- wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); //获得系统wifi服务
- connectManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
获得服务后,即可得到对象进而获得相关属性:
- public NetworkInfo netInfo; //网络连接
- public WifiInfo wifiInfo; //wifi
- public DhcpInfo dhcpInfo; //动态主机配置协议信息的对象,获得IP等网关信息
- netInfo = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
- dhcpInfo = wifiManager.getDhcpInfo();
- wifiInfo = wifiManager.getConnectionInfo();
要获得wifi相关的网络信息,必须设定网络类型参数:ConnectivityManager.TYPE_WIFI.
下面就可以获得需要的信息,例如当前连接wifi的名称等等属性,即SSID:
还要获得当前连接wifi网络的 ip、mask、netgate、dns 等信息,则需要如下实现:
其中dhcpInfo属性的值为int型,要转换成通常见到的32位地址则需要转换方法:
上述方法即可获得wifi网络相关的信息,根据需要来选择方法。
通常我们会根据所搜索到的wifi信号的强度level从强到弱进行排序并显示在列表上:
ScanResult的信号强度属性level是负值,因为它是以分贝数来计算的。然后根据你自己的需求创建相应的Adapter将其显示在ListView上。上述方法搜索到的wifi很多,你还可以加上动态更新、wifi过滤等功能进行显示。
- wifiInfo.getSSID();
- 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) ;
- 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热点
wifiManager提供了一个方法getScanResults()来获得周围的wifi信息,其返回的是一组ScanResult对象,存放在list当中,每个ScanResult对象封装了一个wifi热点相关信息,通过ScanResult对象的属性即可获取到,最常用的两个属性为wifi名称(SSID)和信号强度(level):
- ArrayList<ScanResult> list; //存放周围wifi热点对象的列表
- list = (ArrayList<ScanResult>) wifiManager.getScanResults();
- //将搜索到的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);
- }
- }
- }
获取Wifi列表简单示例:http://download.csdn.net/download/gao_chun/8724413
create by gao_chun.
6 1
- Android wifi属性简介 及 wifi信息获取(wifi列表、配置信息、热点信息)
- 获取wifi热点配置信息
- android 获取wifi信息
- Android获取WiFi 信息
- android WIFI信息获取
- android WIFI信息获取
- Android连续获取当前所连接WiFi及周围热点列表信息的解决方案
- Android盒子开发,获取网络的信息(热点,WIFI,有线)
- android 7.0 有关wifi热点设置信息
- Android6.0及以上版本Wifi开发,扫描Wifi信息,获取Wifi列表为空
- 获取Wifi信息及注册Wifi改变信息
- Wifi属性信息
- 获取wifi信息
- 获取Wifi相关信息
- iOS WIFI 信息 获取
- iOS WIFI 信息 获取
- 获取wifi信息
- 获取收集WiFi信息
- mybatis配置
- svn安装配置
- html5仿app头像上传裁图
- 关于单片机IO口接开关三极管的疑惑
- Win7下IIS发布网站遇到 编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary 编
- Android wifi属性简介 及 wifi信息获取(wifi列表、配置信息、热点信息)
- android:contentDescription的作用是什么
- HEVC之帧内预测的predIntraAng讲解
- python的一些常见用法
- 计算机视觉---2.1---卷积与模板操作
- R语言Data Frame数据框常用操作
- git 删除远程分支
- nginx-cache 总结
- Android开发用真机调试遇到的问题