无线网络管理器WiFiManager

App 若想访问外网资源,得先判断网络连接是否可用。当时检测连接的工具采用了连接管理器ConnectivityManager ,上网方式主要有两种,即数据连接和 WIFI 。
不过ConnectivityManager 能笼统的判断能否上网并不能获知 WIFI 连接的详细信息。当前网络类型是 WIFI 时,要想得知 WIF 上网的具体信息,需另外通过无线网络管理 WifiManager 获取。

WifiManager 的对象从系统服务Context. WIFI_SERVICE 获取。
以下是WifiManager 的常用方法:

  1. isWifiEnabled:判断WLAN 功能是否开启;
  2. setWifiEnabled:开启或关闭WLAN 功能;
  3. 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

连接状态未知

  1. getConnectionInfo:获取当前WIFI 的连接信息。该方法返回一个Wifilnfo 对象, 通过该
    对象的各个方法可获得更具体的WIFI 设备信息:

getSSID

WIFI 路由器 MAC

getRssi

WIFI 信号强度

getLinkSpeed

连接速率

getNetworkld

WIFI 的网络编号

getlpAddress

手机的IP 地址。整型数,需转换常见的IPv4 地址

getMacAddress

本机无线网卡的MAC 地址

getBSSID

路由器WIFI 的MAC 地址

  1. startScan:开始扫描周围的WIFI 信息;
  2. getScanResults:获取WIFI 的扫描结果;
  3. calculateSignalLevel:根据信号强度计算信号等级;
  4. getConfiguredNetworks:获取已配置的网络信息;
  5. addNetwork:添加指定的WIFI 连接;
  6. enableNetwork:启用指定的WIFI 连接。第二个
    参数表示是否同时禁用其他WIFI;
  7. disableNetwork:禁用指定的WIFI 连接;
  8. 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 完成的:

  1. setWifiApEnabled:开启或关闭WiFi 热点(隐藏方法,需要通过反射调用);
  2. getWifiApState:获取当前的WiFi 热点状态:

序号

WifiManager 类的 WIFI 热点状态

说明

1

WIFI_AP_STATE_DISABLED

WIFI 热点已关闭

2

WIFI_AP_STATE_DISABLING

WIFI 热点正在关闭

3

WIFI_AP_STATE_ENABLED

WIFI 热点 开启

4

WIFI_AP_STATE_ENABLING

WIFI 热点正在开启

5

WIFI_AP_STATE_FAILED

WIFI 热点开启失败

  1. isWifiApEnabled:判断WIFI 热点是否启用。只有已连接状态才返回true,其余都返回
    false
  2. getWifiApConfigur tion:获取WIFI 热点的配置信息;
  3. setWifiApConfiguration:设置WiFi 热点的配置信息;
  4. addToBlacklist:把指MAC 地址添加到黑名单列表,即阻止该设备连接热点;
  5. clearBlacklist:清除黑名单列表。

注意:上述与WiFi 热点有关的方法都是隐藏方法(加上了hide 标记),这意味着外部无法直接调用该方法。
若确实需要调用这些隐藏方法,需要通过Java 的反射机制间接实现。

反射机制指的是在运行过程中, 程序能够调用任意一个对象的任意公开方法和属性,而不被 hide 标记所束缚。