概述
-
- 接口简介
- 开发实例
接口简介
因为项目需要,所以完成了一个简单的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 |
preShareKey | WPA加密时,保存密码的变量 |
status | 网络配置的当前状态 |
wepKeys | String[]类型,最多保存4个WEP密钥 |
wepTxKeyIndex | WEP密钥索引 |
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) | boolean | netId为addNetwork的返回值,禁用这个网络 |
getWifiState() | int | 得到wifi状态 |
removeNetwork(int netId) | boolean | 已配置网络列表中删除此网络 |
开发实例
下面提供一个功能较为完善的wifi开发例子:
下载地址为 http://download.csdn.net/detail/u010738604/9050129
演示效果:
我将判断以及连接wifi的各种方法操作均封装在了WifiAdmin类中,关键代码如下:
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模块开发所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复