二、常用的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() 获取SSID
getSupplicanState() 获取具体客户端状态的信息
六、示例
====
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 = wi
fi.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();
总结:
各行各样都会淘汰一些能力差的,不仅仅是IT这个行业,所以,不要被程序猿是吃青春饭等等这类话题所吓倒,也不要觉得,找到一份工作,就享受安逸的生活,你在安逸的同时,别人正在奋力的向前跑,这样与别人的差距也就会越来越遥远,加油,希望,我们每一个人,成为更好的自己。
-
BAT大厂面试题、独家面试工具包,
-
资料包括 数据结构、Kotlin、计算机网络、Framework源码、数据结构与算法、小程序、NDK、Flutter,