在实现一个WIFI无线连接设置中需要注意的问题
来源:互联网 发布:js shift 多选 编辑:程序博客网 时间:2024/05/29 18:03
1 首先,要实现一个简单的WIFI连接设置,我们需要掌握和WIFI功能相关的一些类,比如WIfiManager,WifiInfo,ScanResult,WifiConfiguration等,提供了WIFI连接相关的基本的API.
比如:
打开关闭网关:wifiManager.setWifiEnabled(true/false);
扫描周边网络:wifiManager.getScanResults();
连接指定网络:wifiManager.enableNetwork(networkId,true);
添加网络:wifiManager.addNetwork(wcg);
移除网络:wifiManager.removeNetwork(netId);
获取网卡状态:wifiManager.getWifiState()
……
2 扫描的网络将会被保存在一个List<ScanResult>中,同时WifiManager会为我们维护一个List<WifiConfiguration>,这个List中保存了我们已经连接过的配置好的网络连接.
当我们选择一个网络时,判断它是否存在于这个List中,存在即可直接连接,否则需要用户输入密码创建一个新的WifiConfiguration.
3 获得的ScanResult中将会保存有该无线连接的相关信息,包括SSID,BSSID,capabilities,level等属性,其中SSID号是该连接的一个标识符,比如我们经常看到的TP_LINKXXX.
capabilities中保存了相关加密信息,比如WEB和WPA等.level则表示信号度.
4 在获取连接状态时,即调用wifiManager.getWifiState()或者wifiInfo.getSupplicantState()时,通常在用户已经授权成功后,我们获得的状态值就为COMPLETED,此时不管网络是否已经连接成功,我们都无法获得新的状态. 所以要判断WIFI网络是否已经真的连接成功需要用到如下方法判断:
ConnectivityManager connManager = (ConnectivityManager) WifiConnection.this
.getSystemService(CONNECTIVITY_SERVICE);
// 获取代表联网状态的NetWorkInfo对象
NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.getType() == 1
&& wifiAdmin.getWifiInfo().getSSID()!=null)
{
//WIFI网络连接成功
}
5 获取本地IP地址的方法:
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e("WifiPreference IpAddress", ex.toString());
}
return null;
}
6 在创建一个新的WifiConfiguration时,切记SSID和preSharedKey必须添加双引号,否则必将会导致连接失败.正确写法如下:
//创建一个新的WifiConfiguration
WifiConfiguration wcg = new WifiConfiguration();
wcg.BSSID = mBSSID;
//SSID和preSharedKey必须添加双引号,否则将会导致连接失败
wcg.SSID = "\"" + mSSID + "\"";
wcg.hiddenSSID = false;
wcg.status = WifiConfiguration.Status.ENABLED;
wcg.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
wcg.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
wcg.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wcg.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wcg.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
wcg.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
//如果加密模式为WEP
if(mSecurity.equals("WEP"))
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
wcg.wepKeys[0] ="\"" + editText.getText().toString() + "\""; //This is the WEP Password
wcg.wepTxKeyIndex = 0;
}
//如果加密模式为WPA EPA
else if(mSecurity.equals("WPA EAP"))
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wcg.preSharedKey = "\"" + editText.getText().toString() + "\"";
}
//如果加密模式为WPA PSK
else if(mSecurity.equals("WPA PSK"))
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wcg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wcg.preSharedKey = "\"" + editText.getText().toString() + "\"";
}
//无加密
else
{
wcg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
}
其他问题将会即使进行补充.
- 在实现一个WIFI无线连接设置中需要注意的问题
- 在MyEclipse中使用Hibernate需要注意的一个问题
- 在SSH2开发中需要注意的一个小问题。
- 在代码中设置ListView的divider,需要注意的两个问题
- android 在代码中动态设置字体颜色需要注意的问题
- Android 在代码中动态设置字体颜色需要注意的问题
- Discuz中设置广告的一个需要注意的地方
- JavaScript Tip/Trick: 动态创建Table时,在IE中需要注意的一个问题
- 动态创建Table时,在IE中需要注意的一个问题
- jquery parent()方法在table标签中使用需要注意的一个问题
- 遇到的问题-----win7配置wifi时设置网络后无线连接不出现
- yield在大循环中需要注意的一个情况
- 中时间数据查询需要注意的一个小问题
- 使用DB2中需要注意的一个问题。
- socket运用中需要注意的一个问题
- HttpServletResponse中获取PrintWriter需要注意的一个小问题
- 开发中自己千万需要注意的一个问题
- php中使用$_REQUEST需要注意的一个问题
- poj2002 hash
- 如何由IP地址反向查询自治域号
- qt移植出现Segmentation fault
- MYGUI Generic factory
- jQuery 循环图片滚动切换效果代码
- 在实现一个WIFI无线连接设置中需要注意的问题
- java.util.concurrent-------TimeUnit
- C#中调用非托管的DLL及参数传递 (一)
- 网摘
- request.getHeader("referer")的作用
- python获取本地位置和天气
- 两个数据库有一个相同的表,将A中的a表复制到B中的b表
- 数据录入及转移
- struts1和struts2区别