1 关于wifi的操作主要包括以下几个类和接口:
1.1 ScanResult:主要用来描述已经检测出的接入点,包括介入点的地址,介入点的名称,身份认证,频率,信号强度等信息
1.2 wifiConfiguration:wifi网络的配置,包括安全配置等
1.3 wifiInfo:wifi无线连接的描述,包括接入点,网络连接状态,隐藏的接入点,IP地址,连接速度,mac地址,网络ID,信号强度等信息。
1.4 wifiManager:提供了管理wifi连接的大部分API,它主要包括如下内容:
a)已经配置好的网络的清单。这个清单可以查看和修改,而且可以修改个别记录的属性
b) 当连接中有活动的wi-fi网络时,可以建立或者关闭这个连接,并且可以查询有关网络的状态的动态信息。
c)对接入点的扫描结果包含足够的信息来决定需要与什么接入点建立连接。
d) 还定义了许多常量来表示wi-fi状态的改变。
1.5 wifiManager.WifiLock:允许程序一直使用wifi无线网络,使其一直保持连接
2. 代码例子:
2.1 TestWiFi:
1 import java.util.List;
2 import android.content.Context;
3 import android.net.wifi.ScanResult;
4 import android.net.wifi.WifiConfiguration;
5 import android.net.wifi.WifiInfo;
6 import android.net.wifi.WifiManager;
7 import android.net.wifi.WifiManager.WifiLock;
8
9 public class TestWiFi
10 {
11 // 定义WifiManager对象
12 private WifiManager mWifiManager;
13
14 // 定义WifiInfo对象
15 private WifiInfo mWifiInfo;
16
17 // 扫描出的网络连接列表
18 private List<ScanResult> mWifiList;
19
20 // 网络连接列表
21 private List<WifiConfiguration> mWifiConfigurations;
22
23 // wifiLock锁
24 WifiLock mWifiLock;
25
26 public TestWiFi(Context context)
27 {
28 // 取得WifiManager对象
29 mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
30 // 取得WifiInfo对象
31 mWifiInfo = mWifiManager.getConnectionInfo();
32 }
33
34 /**
35 * 打开wifi
36 *
37 * @see [类、类#方法、类#成员]
38 */
39 public void openWifi()
40 {
41 if (!mWifiManager.isWifiEnabled())
42 {
43 mWifiManager.setWifiEnabled(true);
44 }
45 }
46
47 /**
48 * 关闭wifi
49 *
50 * @see [类、类#方法、类#成员]
51 */
52 public void closeWifi()
53 {
54 if (mWifiManager.isWifiEnabled())
55 {
56 mWifiManager.setWifiEnabled(false);
57 }
58 }
59
60 /**
61 * 锁定wifi
62 *
63 * @see [类、类#方法、类#成员]
64 */
65 public void acquireWifiLock()
66 {
67 mWifiLock.acquire();
68 }
69
70 /**
71 * 解锁wif
72 *
73 * @see [类、类#方法、类#成员]
74 */
75 public void releaseWifiLock()
76 {
77 // 解锁前锁定
78 if (mWifiLock.isHeld())
79 {
80 mWifiLock.acquire();
81 }
82 }
83
84 /**
85 * 创建一个wifiLock
86 *
87 * @see [类、类#方法、类#成员]
88 */
89 public void creatWifiLock()
90 {
91 mWifiLock = mWifiManager.createWifiLock("Test");
92 }
93
94 /**
95 * 得到配置好的网络
96 *
97 * @return
98 * @see [类、类#方法、类#成员]
99 */
100 public List<WifiConfiguration> getConfiguration()
101 {
102 return mWifiConfigurations;
103 }
104
105 /**
106 * 指定配置好的网络进行连接
107 *
108 * @param index
109 * @see [类、类#方法、类#成员]
110 */
111 public void conectConfiguration(int index)
112 {
113 // 索引大于配置好的网络索引
114 if (index > mWifiConfigurations.size())
115 {
116 return;
117 }
118 // 连接配置好的指定ID的网络
119 mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId, true);
120 }
121
122 /**
123 * 开始扫描
124 *
125 * @see [类、类#方法、类#成员]
126 */
127 public void startScan()
128 {
129 mWifiManager.startScan();
130 // 得到扫描结果
131 mWifiList = mWifiManager.getScanResults();
132 // 得到配置好的网络连接
133 mWifiConfigurations = mWifiManager.getConfiguredNetworks();
134 }
135
136 /**
137 * 得到网络列表
138 *
139 * @return
140 * @see [类、类#方法、类#成员]
141 */
142 public List<ScanResult> getwifiList()
143 {
144 return mWifiList;
145 }
146
147 /**
148 * 查看扫描结果
149 *
150 * @return
151 * @see [类、类#方法、类#成员]
152 */
153 public StringBuilder lookUpScan()
154 {
155 StringBuilder stringBuilder = new StringBuilder();
156 for (int i = 0; i < mWifiList.size(); i++)
157 {
158 stringBuilder.append("Index " + new Integer(i + 1).toString() + ":");
159 // 将ScanResult信息转换成一个字符串
160 // 其中包括BSSID,SSID,capabilities,frequency和level
161 stringBuilder.append((mWifiList.get(i)).toString());
162 stringBuilder.append("\n");
163 }
164 return stringBuilder;
165 }
166
167 /**
168 * 得到Mac地址
169 *
170 * @return
171 * @see [类、类#方法、类#成员]
172 */
173 public String getMacAdrress()
174 {
175 return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
176 }
177
178 /**
179 * 得到接入点的BSSID
180 *
181 * @return
182 * @see [类、类#方法、类#成员]
183 */
184 public String getBSSID()
185 {
186 return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
187 }
188
189 /**
190 * 得到IP地址
191 *
192 * @return
193 * @see [类、类#方法、类#成员]
194 */
195 public int getIPAddress()
196 {
197 return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
198
199 }
200
201 /**
202 * 得到连接的ID
203 *
204 * @return
205 * @see [类、类#方法、类#成员]
206 */
207 public int getNetWorkId()
208 {
209 return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
210 }
211
212 /**
213 * 得到wifiInfo的所有信息包
214 *
215 * @return
216 * @see [类、类#方法、类#成员]
217 */
218 public String getWifiInfo()
219 {
220 return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
221 }
222
223 /**
224 * 添加一个网络并连接
225 *
226 * @see [类、类#方法、类#成员]
227 */
228 public void addNetwork(WifiConfiguration wcg)
229 {
230 int wcgID = mWifiManager.addNetwork(wcg);
231 mWifiManager.enableNetwork(wcgID, true);
232 }
233
234 /**
235 * 断开指定的ID的网络
236 */
237 public void disconnectWifi(int netId)
238 {
239 mWifiManager.disableNetwork(netId);
240 mWifiManager.disconnect();
241 }
242 }
2.2使用wifi网络连接,需要在AndroidManifest.xml中加入对应的权限:
1 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
2 <uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"/>
3 <uses-permission android:name="android.permission.WAKE_LOCK"/>
4 <uses-permission android:name="android.permission.INTERNET"/>
5 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
6 <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>