访问Android硬件资源の管理网络和Wifi连接(3)

我们可以使用startScan函数进行Wifi接入点的扫描,当扫描结束且结果可用时,WifiManager将发送SCAN_RESULTS_AVAILABLE_ACTIONL类型的intent。使用getScanResults函数可以获取扫描的结果信息,并保存中ScanResult对象中。ScanResult对象中存放了检测到的每个接入点的详细信息,包括链路速度、信号强度、SSID和支持的认证技术。下面代码片段显示了Wifi热点扫描的过程:

[java]

  // Register a broadcast receiver that listens for scan results      registerReceiver(new BroadcastReceiver() {      @Override   public void onReceive(Context context, Intent intent) {       List<ScanResult> results = wifi.getScanResults();       ScanResult bestSignal = null;       for (ScanResult result : results) {           if (null == bestSignal ||                   WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0) {               bestSignal = result;           }       }              String toastText = String.format("{0} networks found. {1} is the strongest.",                results.size(), bestSignal.SSID);       Toast.makeText(getApplicationContext(), toastText, Toast.LENGTH_LONG);   }            }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));          //Initiate a scan      wifi.startScan();  

要连接到网络,需要创建和注册WiFi配置,通常用户可以使用Android系统原生的WiFi配置程序,但我们也可以在自己的应用程序中提供相同的功能,设置完全替代原生的WiFi配置程序,这就要用到保存网络配置信息的WifiConfiguration类了。每个WiFi配置一般都会包含以下几个公共的数据项:

1)BSSID:指明接入点的BSSID;

2)SSID:某一特定网络的SSID;

3)networkId:用来唯一标识当前设备使用的网络配置的id;

4)priority:选择连接哪个接入点时要使用的每个网络配置的优先权;

5)status:当前网络连接的状态,取值如下:

WifiConfiguration.Status.ENABLED,WifiConfiguration.Status.DISABLED,

WifiConfiguration.Status.CURRENT。

WifiConfiguration对象中还包括支持的认证技术以及用于与接入点进行认证的密钥。

使用addNetwork函数可以将新的WiFi配置添加到当前WiFi列表中,类似的,updateNetwork函数可以用于更新某个已存在的WiFi配置的某些信息;removeNetwork函数用于移除配置信息。要保存网络配置的任何变化,需要调用saveConfiguration函数。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyzxzd.html