无线网络管理器WiFiManager
App 若想访问外网资源,得先判断网络连接是否可用。当时检测连接的工具采用了连接管理器ConnectivityManager
,上网方式主要有两种,即数据连接和 WIFI 。
不过ConnectivityManager
能笼统的判断能否上网并不能获知 WIFI 连接的详细信息。当前网络类型是 WIFI 时,要想得知 WIF 上网的具体信息,需另外通过无线网络管理 WifiManager
获取。
WifiManager
的对象从系统服务Context. WIFI_SERVICE 获取。
以下是WifiManager
的常用方法:
-
isWifiEnabled
:判断WLAN 功能是否开启; -
setWifiEnabled
:开启或关闭WLAN 功能; -
getWifiState
:获取当前的WIFI 连接状态;
序号 | WifiManager 类的连接状态 | 说明 |
1 | WIFI_STATE_DISABLED | 己断开WIFI |
2 | WIFI_STATE_DISABLING | 正在断开WIFI |
3 | WIFI_STATE_ENABLED | 己连上WIFI |
4 | WIFI_STATE_ENABLING | 正在连接WIFI |
5 | WIFI_STATE_UNKNOWN | 连接状态未知 |
-
getConnectionInfo
:获取当前WIFI 的连接信息。该方法返回一个Wifilnfo 对象, 通过该
对象的各个方法可获得更具体的WIFI 设备信息:
getSSID | WIFI 路由器 MAC |
getRssi | WIFI 信号强度 |
getLinkSpeed | 连接速率 |
getNetworkld | WIFI 的网络编号 |
getlpAddress | 手机的IP 地址。整型数,需转换常见的IPv4 地址 |
getMacAddress | 本机无线网卡的MAC 地址 |
getBSSID | 路由器WIFI 的MAC 地址 |
-
startScan
:开始扫描周围的WIFI 信息; -
getScanResults
:获取WIFI 的扫描结果; -
calculateSignalLevel
:根据信号强度计算信号等级; -
getConfiguredNetworks
:获取已配置的网络信息; -
addNetwork
:添加指定的WIFI 连接; -
enableNetwork
:启用指定的WIFI 连接。第二个
参数表示是否同时禁用其他WIFI; -
disableNetwork
:禁用指定的WIFI 连接; -
disconnect
:断开当前WIFI 连接。
热点管理
打开WiFi 热点需要添加如下权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
在AndroidManifest.xml 中注册MAC 与设备的关系导入服务,注册代码:
在这里插入代码片
WiFi 热点的操作也是通过无线网络管理器WifiManager
完成的:
-
setWifiApEnabled
:开启或关闭WiFi 热点(隐藏方法,需要通过反射调用); -
getWifiApState
:获取当前的WiFi 热点状态:
序号 | WifiManager 类的 WIFI 热点状态 | 说明 |
1 |
| WIFI 热点已关闭 |
2 |
| WIFI 热点正在关闭 |
3 |
| WIFI 热点 开启 |
4 |
| WIFI 热点正在开启 |
5 |
| WIFI 热点开启失败 |
-
isWifiApEnabled
:判断WIFI 热点是否启用。只有已连接状态才返回true,其余都返回
false; -
getWifiApConfigur tion
:获取WIFI 热点的配置信息; -
setWifiApConfiguration
:设置WiFi 热点的配置信息; -
addToBlacklist
:把指MAC 地址添加到黑名单列表,即阻止该设备连接热点; -
clearBlacklist
:清除黑名单列表。
注意:上述与WiFi 热点有关的方法都是隐藏方法(加上了hide 标记),这意味着外部无法直接调用该方法。
若确实需要调用这些隐藏方法,需要通过Java 的反射机制间接实现。
反射机制指的是在运行过程中, 程序能够调用任意一个对象的任意公开方法和属性,而不被 hide 标记所束缚。