我是靠谱客的博主 大胆丝袜,这篇文章主要介绍Android之Wifi模块开发,现在分享给大家,希望可以做个参考。

    • 接口简介
    • 开发实例

接口简介

因为项目需要,所以完成了一个简单的wifi模块,主要实现了打开wifi、获取网络列表、连接有密码或者无密码的网络等等,android为wifi操作提供了很多接口,在此简单总结一下所用的类和代码中使用的主要的方法(英语渣渣自己翻译的API,凑合看看吧)。

1、 ScanResult
主要用来描述已检测出来的接入点。

变量名简介
BSSID接入点地址
SSID网络名称
capabilties通过接入点描述身份鉴定、密钥管理及加密方案
frequency客户端与此接入点通信的频率
level信号强度
timestamp时间同步功能
方法名返回值简介
toString()String将其返回一个String类型的值

2、WifiInfo
连接的wifi信息描述。

方法名返回值简介
getBSSID()String得到当前接入点的地址
getSSID()String获得当前接入点名称
getNerworkId()int获得已配制好的网络的ID

3、WifiConfiguration
代表配置好的wifi,包括安全验证。
wifi有三种安全模式:无密码、WEP和WPA三种(简单了解可达链接 wifi三种安全模式),设置均不一样,具体在代码中createWifiInfo方法实现。

变量名简介
SSID网络名
networkId配置好的网络的ID
allowedAuthAlgorithms该配置的身份鉴定协议集
allowedGroupCiphers该配置的组群密钥
allowedKeyManagement该配置的密钥管理协议集
allowedPairwiseCiphers该配置的WPA成对密码集
allowedProtocols该配置的安全协议集
hiddenSSID是否隐藏SSID
preShareKeyWPA加密时,保存密码的变量
status网络配置的当前状态
wepKeysString[]类型,最多保存4个WEP密钥
wepTxKeyIndexWEP密钥索引

3、WifiManage

方法名返回值简介
getConnectionInfo()WifiInfo得到当前连接的Wifi信息
addNetwork(WifiConfiguration config)int增加一个已配置好的网络config,返回-1则是失败
startScan()boolean提出扫描接入点请求
getScanResults()List得到最新的可连接点列表
getConfiguredNetworks()List返回所有已配置网络集合
isWifiEnabled()boolean判断wifi是否打开
setWifiEnabled(boolean enabled)boolean设置wifi打开状态
enableNetwork (int netId, boolean disableOthers)boolean连接一个网络,可选择禁用其他网络
disableNetwork (int netId)booleannetId为addNetwork的返回值,禁用这个网络
getWifiState()int得到wifi状态
removeNetwork(int netId)boolean已配置网络列表中删除此网络

开发实例

下面提供一个功能较为完善的wifi开发例子:
下载地址为 http://download.csdn.net/detail/u010738604/9050129
演示效果:
演示效果

我将判断以及连接wifi的各种方法操作均封装在了WifiAdmin类中,关键代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
public class WifiAdmin { // 定义WifiManager对象 public WifiManager mWifiManager; // 定义WifiInfo对象 public WifiInfo mWifiInfo; // 扫描出的网络连接列表 public List<ScanResult> mWifiList; // 网络连接列表 public List<WifiConfiguration> mWifiConfiguration; // 定义一个WifiLock WifiLock mWifiLock; public WifiAdmin(Context context){ mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); System.out.println("mWifiManager="+mWifiManager); // 取得WifiInfo对象 mWifiInfo = mWifiManager.getConnectionInfo(); } public WifiConfiguration checkWiFiConfig(String str) { for (WifiConfiguration C : mWifiConfiguration) { if (C.SSID.equals(""" +str+ """)) { return C; } } return null; } public void getWifiList() { // mWifiManager.; mWifiManager.startScan(); // 得到扫描结果 mWifiList = mWifiManager.getScanResults(); System.out.println("mWifiList="+mWifiList); // 得到配置好的网络连接 mWifiConfiguration = mWifiManager.getConfiguredNetworks(); } // 打开WIFI public void openWifi() { if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(true); } } // 得到WifiInfo的所有信息包 public String getWifiInfo() { return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString(); } // 关闭WIFI public void closeWifi() { if (mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(false); } } // 指定配置好的网络进行连接 public void connectConfiguration(int index) { // 索引大于配置好的网络索引返回 if (index > mWifiConfiguration.size()) { return; } // 连接配置好的指定ID的网络 mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true); } // 检查当前WIFI状态 public int checkState() { return mWifiManager.getWifiState(); } public WifiConfiguration IsExsits(String SSID) { List<WifiConfiguration> existingConfigs = mWifiManager .getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (existingConfig.SSID.equals(""" + SSID + """)) { return existingConfig; } } return null; } //验证wifi密码,如果成功则返回一个配置好的WIFI信息 public WifiConfiguration createWifiInfo(String SSID, String Password, int Type) { //Log.v(TAG, "SSID = " + SSID + "## Password = " + Password + "## Type = " + Type); System.out.println("SSID = " + SSID + "## Password = " + Password + "## Type = " + Type); if (SSID == null || Password == null || SSID.equals("")) { //Log.e(TAG, "addNetwork() ## nullpointer error!"); System.out.println("addNetwork() ## nullpointer error!"); return null; } WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID = """ + SSID + """; WifiConfiguration tempConfig = isExsits(SSID, mWifiManager); if (tempConfig != null) { mWifiManager.removeNetwork(tempConfig.networkId); } if (Type == 1) // WIFICIPHER_NOPASS { config.wepKeys[0] = ""; config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.wepTxKeyIndex = 0; } if (Type == 2) // WIFICIPHER_WEP { config.hiddenSSID = true; config.wepKeys[0] = """ + Password + """; config.allowedAuthAlgorithms .set(WifiConfiguration.AuthAlgorithm.SHARED); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); config.allowedGroupCiphers .set(WifiConfiguration.GroupCipher.WEP104); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.wepTxKeyIndex = 0; } if (Type == 3) // WIFICIPHER_WPA { config.preSharedKey = """ + Password + """; config.hiddenSSID = true; config.allowedAuthAlgorithms .set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); config.allowedPairwiseCiphers .set(WifiConfiguration.PairwiseCipher.TKIP); // config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedPairwiseCiphers .set(WifiConfiguration.PairwiseCipher.CCMP); config.status = WifiConfiguration.Status.ENABLED; } return config; } /** * 判断wifi是否存在 * * @param SSID * @param wifiManager * @return */ public static WifiConfiguration isExsits(String SSID, WifiManager wifiManager) { List<WifiConfiguration> existingConfigs = wifiManager .getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (existingConfig.SSID.equals(""" + SSID + """)) { return existingConfig; } } return null; } public boolean ifConfigured(String ssid, WifiManager mWifiManager2) { // TODO Auto-generated method stub if(isExsits(ssid, mWifiManager2) != null) return true; return false; } }

最后

以上就是大胆丝袜最近收集整理的关于Android之Wifi模块开发的全部内容,更多相关Android之Wifi模块开发内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部