WiFi设置功能模块 (快速实现和分析要点)
Android 物联网WIFI模块配置,软件上需要连接WIFI网络
1、熟悉系统提供API
由于对WIFI相关功能API不是很了解,参考官方源码 androidxref,下面列简单的必要类
-
WifiManager
顾名思义即WIFI服务管理者或官方描述此类提供用于管理 Wi-Fi 连接各个方面的主要 API。…
-
ScanResult
扫描WIFI结果或官方描述有关检测到的接入点的信息。 除了此处描述的属性之外,请求方maxbitrate跟踪quality 、 noise和maxbitrate属性,但目前不会将它们报告给外部客户端。 -
WifiConfiguration
表示已配置的 Wi-Fi 网络的类,包括安全配置。 -
WifiInfo
描述任何处于活动状态或正在设置过程中的 Wifi 连接的状态。
1.1、WifiManager基本API
this.mContext = context.getApplicationContext();
this.mWifiManager = (WifiManager) this.mContext.getSystemService(Context.WIFI_SERVICE);
//openWifi
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
return;
}
//closeWifi
if (mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
return;
}
//获取WIFI状态
mWifiManager.getWifiState()
//获取WIFI的信息
mLastInfo = mWifiManager.getConnectionInfo(); //WifiInfo
//返回为当前前台用户配置的所有网络的列表
final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks();
//results 最新的接入点扫描结果
final List<ScanResult> results = mWifiManager.getScanResults();
//开启WIFI扫描
boolean ret = mWifiManager.startScan();
//忘记网络,netId是WifiInfo的networkId,这里隐藏API需要反射
void forget(int netId, ActionListener listener){...}
//连接网络,,这里隐藏API需要反射
connect(int networkId, ActionListener listener) {...}
//连接网络方式2,这里隐藏API需要反射
connect(WifiConfiguration config, ActionListener listener) {...}
//断开WIFI
mWifiManager.disableNetwork(mLastInfo);
//向已配置的网络集添加新的网络描述。 所提供的配置对象的networkId字段被忽略。
int networkId = mWifiManager.addNetwork(WifiConfiguration);
boolean enableNetwork = mWifiManager.enableNetwork(networkId, true);
//允许关联先前配置的网络。 如果attemptConnect为true,则启动连接到所选网络的尝试。 这可能会导致状态更改事件的异步传递。
//告诉设备保留已配置网络的当前列表。
mWifiManager.saveConfiguration(); //enableNetwork==true
1.2、WifiInfo基本API
WifiInfo connectionInfo = mWifiManager.getConnectionInfo();
//wifi信号强度
connectionInfo.getRssi();
//获取网络ID。每个配置的网络都有一个唯一的小整数 ID,用于在对请求者执行操作时标识网络。
connectionInfo.getNetworkId();
getIpAddress()
..
1.3、WifiConfiguration基本API
final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks();
WifiConfiguration config = new WifiConfiguration(); //链接网络配置信息
//网络的 SSID。 可以是必须用双引号括起来的 ASCII 字符串(例如"MyNetwork" ),也可以是不包括在引号中的十六进制数字字符串(例如01a243f405 )。
config.SSID = //
//此配置支持的一组密钥管理协议。 有关WifiConfiguration.KeyMgmt的说明,请参阅WifiConfiguration.KeyMgmt 。 默认为 WPA-PSK WPA-EAP。
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); //无
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
//此配置支持的身份验证协议集。 有关WifiConfiguration.AuthAlgorithm的说明,请参阅WifiConfiguration.AuthAlgorithm 。 默认为自动选择。
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
...
1.4、ScanResult
class ScanResult implements Parcelable {
/**
* The network name.
*/
public String SSID;
/**
* Ascii encoded SSID. This will replace SSID when we deprecate it. @hide
*/
public WifiSsid wifiSsid;
...
2、构建功能API
上面分析基本API,心中已有数
- 获取WIFI管理器,订阅相关事件广播
- 扫描附近WIFI网络
- 连接某一个WIFI网络并保存
- 取消保存,断开连接WIFI网络
- …