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));

}