Android Wifi模块 ScanResult类源码分析

类:ScanResult,实现了Parcelable接口

目录位置:/frameworks/base/wifi/java/android/net/wifi/

类描述:ScanResult类描述了一个已发现AP的信息。除了在该类中描述的属性,supplicant还跟踪了quality(品质),noise(噪声),maxbitrate(最大比特率)属性,但是并不立刻将它们通知给客户端。

ScanResult类的成员变量:
1.String SSID:网络名称。
2.WifiSsid wifiSsid:Ascii编码的SSID。
3.String BSSID:AP的地址。
4.String capabilities:描述认证、 密钥管理以及加密方式,通过AP来支持。
5.int level:发现的信号等级,单位是dBm,也被称作RSSI,通过调用WifiManager的caculateSignalLevel方法将该数值进行换算,换算成一个绝对信号等级呈现给用户。
6.int frequency:channel(客户端与AP通信的信道)的频率,单位MHz。
7.long timestamp:从启动开始到该扫描记录最后一次被发现经过的微秒数。
8.long seen:代表该扫描结果最后一次被发现的日期,从1970年到该日期的毫秒数。
9.int isAutoJoinCandidate:代表该扫描结果是否是一个有效的自动加入的候选项。
10.int autoJoinStatus:表示join的状态。
11.numIpConfigFailure:IP配置失败的次数。
12. long blackListTimestamp:我们最后一次将该ScanResult加入黑名单的时间。
13.boolean untrusted:如果为true,说明该扫描结果并不是用户已保存配置中的部分。
14.int numConnection:我们连接到该扫描结果的次数。
15.int numUsage:自动加入使用该 扫描结果的次数。
16.int distanceCm:到AP的大概距离,单位:米,如果无法获取该值,则该值为UNSPECIFIED。
17.int distanceSdCm:到AP距离的标准差,若无法获取该值,则该值为UNSPECIFIED。
18.public InformationElement informationElements[]:在信号中发现的信息元素。
ScanResult类的类变量(static的变量):
1.final int ENABLE=0
2.final int AUTO_ROAM_DISABLE=16
3.final int AUTO_JOIN_DISABLE=32
4.final int AUTHENTICATION_ERROR=128
5.final int UNSPECIFIED=-1
6.final Creator CREATOR:创建一个类实现Parcelable.Creator接口的匿名内部类的对象CREATOR。该类是从一个Parcel中创建ScanResult类对象。

ScanResult类中有一个内嵌类(static类):
public static class InformationElement
该内嵌类是信号(beacon)中的一些信息元素。

ScanResult类的方法:
1.public void averageRssi(int previousRssi, long previousSeen,int maxAge):
用于更新ScanResult的RSSI值,即level。

2.public void setAutoJoinStatus(int  status):
设置autoJoinStatus的值,若传入的 status值小于0,则置零,即设为ENABLE,此时blackListTimeStamp值置0。否则,若传入的status值大于当前值,就用当前时间刷新blackListTimeStamp值,并置autoJoinStatus值为status值。

3.public boolean is24GHz():
直接调用is24GHz(frequency),即用自己的信道频率值进行判断,如果频率值在2400~2500之间,(不包括2400和2500两个边界值),则返回true,否则返回false。

4.public boolean is24GHz(int freq):用传入的freq值进行判断,若在2400~2500之间,不含边界,则返回true,否则返回false。

5.public boolean is5GHz():
直接调用is5GHz(frequency),即用自己的信道频率值进行判断,如果频率值在4900~5900之间,(不包括4900和5900两个边界值),则返回true,否则返回false。

6.public boolean is5GHz(int freq):用传入的freq值进行判断,若在4900~5900之间,不含边界,则返回true,否则返回false。

7.四个构造器:都是很基本的直接赋值,distanceCm和distanceSdCm的默认值是UNSPECIFIED。

8.public String toString():该方法即是重写Object的toString方法,将SSID,BSSID,capabilities,level,frequency,timestamp,distanceCm,distanceSdCm,autoJoinStatus(不为0的话)的值连接成字符串。

9.public int describeContents():实现Parcelable接口的方法,用于描述内容,该方法里什么都没做。

10.public void writeToParcel(Parcel dest,int flags):实现Parcelable接口的方法,将ScanResult序列化到dest中,需要注意的是最后要将数组informationElements按照:先writeInt写入数组长度,再 遍历数组,每个数组元素都先写入id,再写入bytes长度,再写入(writeByteArray)bytes的顺序依次写入dest。

你可能感兴趣的:(Android)