getHiddenSSID() 获取SSID 是否被隐藏
getIpAddress() 获取IP 地址
getLinkSpeed() 获取连接的速度
getMacAddress() 获取Mac 地址
getRssi() 获取802.11n 网络的信号
getSSID() 获取SSID
getSupplicanState() 获取具体客户端状态的信息
六、示例
====
1)获得WifiManager
WifiManager wifiManager=(WifiManager) getSystemService(WIFI_SERVICE);
2)获取Wifi信息
WifiInfo wifiInfo=wifiManager.getConnectionInfo(); //当前wifi连接信息
List 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的名字)
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:
[java] view plain copy
-
public WifiManager wifiManager; //管理wifi
-
public ConnectivityManager connectManager; //管理网络连接
[java] view plain copy
-
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); //获得系统wifi服务
-
connectManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
获得服务后,即可得到对象进而获得相关属性:
[java] view plain copy
-
public NetworkInfo netInfo; //网络连接
-
public WifiInfo wifiInfo; //wifi
-
public DhcpInfo dhcpInfo; //动态主机配置协议信息的对象,获得IP等网关信息
网络信息的获取:
[java] view plain copy
-
netInfo = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
-
dhcpInfo = wifiManager.getDhcpInfo();
-
wifiInfo = wifiManager.getConnectionInfo();
要获得wifi相关的网络信息,必须设定网络类型参数:ConnectivityManager.TYPE_WIFI.
下面就可以获得需要的信息,例如当前连接wifi的名称等等属性,即SSID:
[java] view plain copy
- wifiInfo.getSSID();
还要获得当前连接wifi网络的 ip、mask、netgate、dns 等信息,则需要如下实现:
[java] view plain copy
-
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 plain copy
-
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 plain copy
-
ArrayList list; //存放周围wifi热点对象的列表
-
list = (ArrayList) wifiManager.getScanResults();
通常我们会根据所搜索到的wifi信号的强度level从强到弱进行排序并显示在列表上:
[html] view plain copy
-
//将搜索到的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));
总结:
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
-
BAT大厂面试题、独家面试工具包,
-
资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,
ScanResult temp = null;
-
temp = list.get(i);
-
list.set(i, list.get(j));
总结:
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
-
BAT大厂面试题、独家面试工具包,
-
资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,
[外链图片转存中…(img-RFgW71Ij-1718856426674)]
[外链图片转存中…(img-RF2tpt8q-1718856426674)]