10.1.3 WiFi的管理
WiFi是Android中优先级最高的联网方式,因为它不仅联网速度快,并且流量价格低廉,称得上是物美价廉的典范。但遗憾的是,每个WiFi连接点能够覆盖的区域有限,在用户移动工作时,周边的可用WiFi连接点会不停地变换,需要不断地进行检测和调整,才能保证充分利用Wifi连接网络。
使用android.net.wifi.WifiManager可用来管理和获取WiFi连接相关的信息,比如:调用WifiManager.startScan函数,可以开始搜索周边可用的WiFi连接。WiFi扫描完成后,会通过广播消息通知监听者,Android调用WifiManager.getScanResults函数便可以获取扫描结果:
…
WifiManager manager=(WifiManager)
getSystemService(Context.WIFI_SERVICE);
BroadcastReceiver wifiReceiver=BroadcastReceiver(){
void onReceive(Context context, Intent intent){
//处理扫描结果
List<ScanResult>result=manager.getScanResult();
…
}
};
protected void onResume(){
//开始扫描周边WiFi信息,并监听扫描结果
manager.startScan();
registerReceiver(wifiReceiver, new IntentFilter(
WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();
}
protected void onPause(){
//停止监听WiFi变化
unregisterReceiver(wifiReceiver);
super.onPause();
}
得到扫描结果后,Android可以通过与用户的交互(比如让用户输入密码),将一个可选的WiFi连接,配置成一个有效的WiFi连接点,通过WifiManager.getConfiguredNetwork函数,可以获取所有可用的连接点信息:
WifiManager manager=(WifiManager)
getSystemService(Context.WIFI_SERVICE);
List<WifiConfiguration>configurations=
manager.getConfiguredNetworks();
在实际中,如果应用产生较大的网络流量消耗,Android有必要检查当前的联网方式是否是WiFi,如果是其他连接方式,需要友善地将连接状况传达给用户,避免用户在未知的状况下,因为过多地使用流量而产生高额的费用:
WifiManager manager=(WifiManager)
getSystemService(Context.WIFI_SERVICE);
//判断是否是通过WiFi连接网络
if(manager.getConnectionInfo()==null){
…
//打开WiFi选择界面组件,方便用户切换至WiFi连接
startActivity(new Intent(
WifiManager.ACTION_PICK_WIFI_NETWORK));
}