android WIFI连接开发
2012-10-13 01:10
519 查看
这里列了很多,但是大致可以分为四个主要的类ScanResultwifiConfigurationWifiInfoWifiManager
(1)ScanResult,主要是通过wifi硬件的扫描来获取一些周边的wifi热点的信息。
在我们进行wifi搜索的时候,一般会搜到这些信息,首先是接入点名字、接入点信息的强弱、还有接入点使用的安全模式,是WPA、WPE。
打开这个类,我们可以看到以下几个信息
BSSID接入点的地址,这里主要是指小范围几个无线设备相连接所获取的地址,比如说两台笔记本通过无线网卡进行连接,双方的无线网卡分配的地址。
SSID网络的名字,当我们搜索一个网络时,就是靠这个来区分每个不同的网络接入点。
Capabilities网络接入的性能,这里主要是来判断网络的加密方式等。
Frequency频率,每一个频道交互的MHz数。
Level等级,主要来判断网络连接的优先数。
这里只提供了一个方法,就是将获得信息编程字符串toString()。
(2)wifiConfiguration在我们连通一个wifi接入点的时候,需要获取到的一些信息。大家可以跟我们有线的设备进行对比一下。
这里的数据相对来说比较复杂一下。
六个子类
WifiConfiguration.AuthAlgorthm用来判断加密方法。
WifiConfiguration.GroupCipher获取使用GroupCipher的方法来进行加密。
WifiConfiguration.KeyMgmt获取使用KeyMgmt进行。
WifiConfiguration.PairwiseCipher获取使用WPA方式的加密。
WifiConfiguration.Protocol获取使用哪一种协议进行加密。
wifiConfiguration.Status获取当前网络的状态。
对于上述加密感兴趣的朋友,可以在网上搜索相关的内容。
(3)WifiInfo在我们的wifi已经连通了以后,可以通过这个类获得一些已经连通的wifi连接的信息获取当前链接的信息,这里信息就比较简单了,这里简单介绍一下这里的方法:
getBSSID()获取BSSID
getDetailedStateOf()获取客户端的连通性
getHiddenSSID()获得SSID是否被隐藏
getIpAddress()获取IP地址
getLinkSpeed()获得连接的速度
getMacAddress()获得Mac地址
getRssi()获得802.11n网络的信号
getSSID()获得SSID
getSupplicanState()返回具体客户端状态的信息
(4)wifiManager这个不用说,就是用来管理我们的wifi连接,这里已经定义好了一些类,可以供我们使用。这里来说相对复杂,里面的内容比较多,但是通过字面意思,我们还是可以获得很多相关的信息。这个类里面预先定义了许多常量,我们可以直接使用,不用再次创建。
这里还是简单介绍一下这里的方法:
addNetwork(WifiConfigurationconfig)通过获取到的网络的链接状态信息,来添加网络
calculateSignalLevel(intrssi,intnumLevels)计算信号的等级
compareSignalLevel(intrssiA,intrssiB)对比连接A和连接B
createWifiLock(intlockType,Stringtag)创建一个wifi锁,锁定当前的wifi连接
disableNetwork(intnetId)让一个网络连接失效
disconnect()断开连接
enableNetwork(intnetId,BooleandisableOthers)连接一个连接
getConfiguredNetworks()获取网络连接的状态
getConnectionInfo()获取当前连接的信息
getDhcpInfo()获取DHCP的信息
getScanResulats()获取扫描测试的结果
getWifiState()获取一个wifi接入点是否有效
isWifiEnabled()判断一个wifi连接是否有效
pingSupplicant()ping一个连接,判断是否能连通
ressociate()即便连接没有准备好,也要连通
reconnect()如果连接准备好了,连通
removeNetwork()移除某一个网络
saveConfiguration()保留一个配置信息
setWifiEnabled()让一个连接有效
startScan()开始扫描
updateNetwork(WifiConfigurationconfig)更新一个网络连接的信息
此外wifiManaer还提供了一个内部的子类,也就是wifiManagerLock,WifiManagerLock的作用是这样的,在普通的状态下,如果我们的wifi的状态处于闲置,那么网络的连通,将会暂时中断。但是如果我们把当前的网络状态锁上,那么wifi连通将会保持在一定状态,当然接触锁定之后,就会恢复常态
但是关于链接加密的wifi现在还没有成功……
首先附上一个工具类,有各种WIFI操作方法:
publicclassWifiAdmin{
//定义WifiManager对象
privateWifiManagermWifiManager;
//定义WifiInfo对象
privateWifiInfomWifiInfo;
//扫描出的网络连接列表
privateList<ScanResult>mWifiList;
//网络连接列表
privateList<WifiConfiguration>mWifiConfiguration;
//定义一个WifiLock
WifiLockmWifiLock;
//构造器
publicWifiAdmin(Contextcontext){
//取得WifiManager对象
mWifiManager=(WifiManager)context
.getSystemService(Context.WIFI_SERVICE);
//取得WifiInfo对象
mWifiInfo=mWifiManager.getConnectionInfo();
}
//打开WIFI
publicvoidopenWifi(){
if(!mWifiManager.isWifiEnabled()){
mWifiManager.setWifiEnabled(true);
}
}
//关闭WIFI
publicvoidcloseWifi(){
if(mWifiManager.isWifiEnabled()){
mWifiManager.setWifiEnabled(false);
}
}
//检查当前WIFI状态
publicintcheckState(){
returnmWifiManager.getWifiState();
}
//锁定WifiLock
publicvoidacquireWifiLock(){
mWifiLock.acquire();
}
//解锁WifiLock
publicvoidreleaseWifiLock(){
//判断时候锁定
if(mWifiLock.isHeld()){
mWifiLock.acquire();
}
}
//创建一个WifiLock
publicvoidcreatWifiLock(){
mWifiLock=mWifiManager.createWifiLock("Test");
}
//得到配置好的网络
publicList<WifiConfiguration>getConfiguration(){
returnmWifiConfiguration;
}
//指定配置好的网络进行连接
publicvoidconnectConfiguration(intindex){
//索引大于配置好的网络索引返回
if(index>mWifiConfiguration.size()){
return;
}
//连接配置好的指定ID的网络
mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,
true);
}
publicvoidstartScan(){
mWifiManager.startScan();
//得到扫描结果
mWifiList=mWifiManager.getScanResults();
//得到配置好的网络连接
mWifiConfiguration=mWifiManager.getConfiguredNetworks();
}
//得到网络列表
publicList<ScanResult>getWifiList(){
returnmWifiList;
}
//查看扫描结果
publicStringBuilderlookUpScan(){
StringBuilderstringBuilder=newStringBuilder();
for(inti=0;i<mWifiList.size();i++){
stringBuilder
.append("Index_"+newInteger(i+1).toString()
+":");
//将ScanResult信息转换成一个字符串包
//其中把包括:BSSID、SSID、capabilities、frequency、level
stringBuilder.append((mWifiList.get(i)).toString());
stringBuilder.append("/n");
}
returnstringBuilder;
}
//得到MAC地址
publicStringgetMacAddress(){
return(mWifiInfo==null)?"NULL":mWifiInfo.getMacAddress();
}
//得到接入点的BSSID
publicStringgetBSSID(){
return(mWifiInfo==null)?"NULL":mWifiInfo.getBSSID();
}
//得到IP地址
publicintgetIPAddress(){
return(mWifiInfo==null)?0:mWifiInfo.getIpAddress();
}
//得到连接的ID
publicintgetNetworkId(){
return(mWifiInfo==null)?0:mWifiInfo.getNetworkId();
}
//得到WifiInfo的所有信息包
publicStringgetWifiInfo(){
return(mWifiInfo==null)?"NULL":mWifiInfo.toString();
}
//添加一个网络并连接
publicvoidaddNetwork(WifiConfigurationwcg){
intwcgID=mWifiManager.addNetwork(wcg);
booleanb=mWifiManager.enableNetwork(wcgID,true);
System.out.println("a--"+wcgID);
System.out.println("b--"+b);
}
//断开指定ID的网络
publicvoiddisconnectWifi(intnetId){
mWifiManager.disableNetwork(netId);
mWifiManager.disconnect();
}
}
然后是一个实际应用方法,只验证过没有密码的情况:
WifiConfigurationCreateWifiInfo(StringSSID,StringPassword,intType)
{
WifiConfigurationconfig=newWifiConfiguration();
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
config.SSID="\""+SSID+"\"";
if(Type==Data.WIFICIPHER_NOPASS)
{
config.wepKeys[0]="";
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.wepTxKeyIndex=0;
}
if(Type==Data.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==Data.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.status=WifiConfiguration.Status.ENABLED;
}
returnconfig;
}
}
分为三种情况:1没有密码2用wep加密3用wpa加密
<!--以下是使用wifi访问网络所需要的权限-->
android.permission.CHANGE_NETWORK_STATE//修改网络状态的权限
android.permission.CHANGE_WIFI_STATE//修改wifi状态的权限
android.permission.ACCESS_NETWORK_STATE//访问网络权限
android.permission.ACCESS_WIFI_STATE//访问wifi权
(1)ScanResult,主要是通过wifi硬件的扫描来获取一些周边的wifi热点的信息。
在我们进行wifi搜索的时候,一般会搜到这些信息,首先是接入点名字、接入点信息的强弱、还有接入点使用的安全模式,是WPA、WPE。
打开这个类,我们可以看到以下几个信息
BSSID接入点的地址,这里主要是指小范围几个无线设备相连接所获取的地址,比如说两台笔记本通过无线网卡进行连接,双方的无线网卡分配的地址。
SSID网络的名字,当我们搜索一个网络时,就是靠这个来区分每个不同的网络接入点。
Capabilities网络接入的性能,这里主要是来判断网络的加密方式等。
Frequency频率,每一个频道交互的MHz数。
Level等级,主要来判断网络连接的优先数。
这里只提供了一个方法,就是将获得信息编程字符串toString()。
(2)wifiConfiguration在我们连通一个wifi接入点的时候,需要获取到的一些信息。大家可以跟我们有线的设备进行对比一下。
这里的数据相对来说比较复杂一下。
六个子类
WifiConfiguration.AuthAlgorthm用来判断加密方法。
WifiConfiguration.GroupCipher获取使用GroupCipher的方法来进行加密。
WifiConfiguration.KeyMgmt获取使用KeyMgmt进行。
WifiConfiguration.PairwiseCipher获取使用WPA方式的加密。
WifiConfiguration.Protocol获取使用哪一种协议进行加密。
wifiConfiguration.Status获取当前网络的状态。
对于上述加密感兴趣的朋友,可以在网上搜索相关的内容。
(3)WifiInfo在我们的wifi已经连通了以后,可以通过这个类获得一些已经连通的wifi连接的信息获取当前链接的信息,这里信息就比较简单了,这里简单介绍一下这里的方法:
getBSSID()获取BSSID
getDetailedStateOf()获取客户端的连通性
getHiddenSSID()获得SSID是否被隐藏
getIpAddress()获取IP地址
getLinkSpeed()获得连接的速度
getMacAddress()获得Mac地址
getRssi()获得802.11n网络的信号
getSSID()获得SSID
getSupplicanState()返回具体客户端状态的信息
(4)wifiManager这个不用说,就是用来管理我们的wifi连接,这里已经定义好了一些类,可以供我们使用。这里来说相对复杂,里面的内容比较多,但是通过字面意思,我们还是可以获得很多相关的信息。这个类里面预先定义了许多常量,我们可以直接使用,不用再次创建。
这里还是简单介绍一下这里的方法:
addNetwork(WifiConfigurationconfig)通过获取到的网络的链接状态信息,来添加网络
calculateSignalLevel(intrssi,intnumLevels)计算信号的等级
compareSignalLevel(intrssiA,intrssiB)对比连接A和连接B
createWifiLock(intlockType,Stringtag)创建一个wifi锁,锁定当前的wifi连接
disableNetwork(intnetId)让一个网络连接失效
disconnect()断开连接
enableNetwork(intnetId,BooleandisableOthers)连接一个连接
getConfiguredNetworks()获取网络连接的状态
getConnectionInfo()获取当前连接的信息
getDhcpInfo()获取DHCP的信息
getScanResulats()获取扫描测试的结果
getWifiState()获取一个wifi接入点是否有效
isWifiEnabled()判断一个wifi连接是否有效
pingSupplicant()ping一个连接,判断是否能连通
ressociate()即便连接没有准备好,也要连通
reconnect()如果连接准备好了,连通
removeNetwork()移除某一个网络
saveConfiguration()保留一个配置信息
setWifiEnabled()让一个连接有效
startScan()开始扫描
updateNetwork(WifiConfigurationconfig)更新一个网络连接的信息
此外wifiManaer还提供了一个内部的子类,也就是wifiManagerLock,WifiManagerLock的作用是这样的,在普通的状态下,如果我们的wifi的状态处于闲置,那么网络的连通,将会暂时中断。但是如果我们把当前的网络状态锁上,那么wifi连通将会保持在一定状态,当然接触锁定之后,就会恢复常态
但是关于链接加密的wifi现在还没有成功……
首先附上一个工具类,有各种WIFI操作方法:
publicclassWifiAdmin{
//定义WifiManager对象
privateWifiManagermWifiManager;
//定义WifiInfo对象
privateWifiInfomWifiInfo;
//扫描出的网络连接列表
privateList<ScanResult>mWifiList;
//网络连接列表
privateList<WifiConfiguration>mWifiConfiguration;
//定义一个WifiLock
WifiLockmWifiLock;
//构造器
publicWifiAdmin(Contextcontext){
//取得WifiManager对象
mWifiManager=(WifiManager)context
.getSystemService(Context.WIFI_SERVICE);
//取得WifiInfo对象
mWifiInfo=mWifiManager.getConnectionInfo();
}
//打开WIFI
publicvoidopenWifi(){
if(!mWifiManager.isWifiEnabled()){
mWifiManager.setWifiEnabled(true);
}
}
//关闭WIFI
publicvoidcloseWifi(){
if(mWifiManager.isWifiEnabled()){
mWifiManager.setWifiEnabled(false);
}
}
//检查当前WIFI状态
publicintcheckState(){
returnmWifiManager.getWifiState();
}
//锁定WifiLock
publicvoidacquireWifiLock(){
mWifiLock.acquire();
}
//解锁WifiLock
publicvoidreleaseWifiLock(){
//判断时候锁定
if(mWifiLock.isHeld()){
mWifiLock.acquire();
}
}
//创建一个WifiLock
publicvoidcreatWifiLock(){
mWifiLock=mWifiManager.createWifiLock("Test");
}
//得到配置好的网络
publicList<WifiConfiguration>getConfiguration(){
returnmWifiConfiguration;
}
//指定配置好的网络进行连接
publicvoidconnectConfiguration(intindex){
//索引大于配置好的网络索引返回
if(index>mWifiConfiguration.size()){
return;
}
//连接配置好的指定ID的网络
mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,
true);
}
publicvoidstartScan(){
mWifiManager.startScan();
//得到扫描结果
mWifiList=mWifiManager.getScanResults();
//得到配置好的网络连接
mWifiConfiguration=mWifiManager.getConfiguredNetworks();
}
//得到网络列表
publicList<ScanResult>getWifiList(){
returnmWifiList;
}
//查看扫描结果
publicStringBuilderlookUpScan(){
StringBuilderstringBuilder=newStringBuilder();
for(inti=0;i<mWifiList.size();i++){
stringBuilder
.append("Index_"+newInteger(i+1).toString()
+":");
//将ScanResult信息转换成一个字符串包
//其中把包括:BSSID、SSID、capabilities、frequency、level
stringBuilder.append((mWifiList.get(i)).toString());
stringBuilder.append("/n");
}
returnstringBuilder;
}
//得到MAC地址
publicStringgetMacAddress(){
return(mWifiInfo==null)?"NULL":mWifiInfo.getMacAddress();
}
//得到接入点的BSSID
publicStringgetBSSID(){
return(mWifiInfo==null)?"NULL":mWifiInfo.getBSSID();
}
//得到IP地址
publicintgetIPAddress(){
return(mWifiInfo==null)?0:mWifiInfo.getIpAddress();
}
//得到连接的ID
publicintgetNetworkId(){
return(mWifiInfo==null)?0:mWifiInfo.getNetworkId();
}
//得到WifiInfo的所有信息包
publicStringgetWifiInfo(){
return(mWifiInfo==null)?"NULL":mWifiInfo.toString();
}
//添加一个网络并连接
publicvoidaddNetwork(WifiConfigurationwcg){
intwcgID=mWifiManager.addNetwork(wcg);
booleanb=mWifiManager.enableNetwork(wcgID,true);
System.out.println("a--"+wcgID);
System.out.println("b--"+b);
}
//断开指定ID的网络
publicvoiddisconnectWifi(intnetId){
mWifiManager.disableNetwork(netId);
mWifiManager.disconnect();
}
}
然后是一个实际应用方法,只验证过没有密码的情况:
WifiConfigurationCreateWifiInfo(StringSSID,StringPassword,intType)
{
WifiConfigurationconfig=newWifiConfiguration();
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
config.SSID="\""+SSID+"\"";
if(Type==Data.WIFICIPHER_NOPASS)
{
config.wepKeys[0]="";
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.wepTxKeyIndex=0;
}
if(Type==Data.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==Data.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.status=WifiConfiguration.Status.ENABLED;
}
returnconfig;
}
}
分为三种情况:1没有密码2用wep加密3用wpa加密
WifiManagerwifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);
booleanbRet1=wifiManager.setWifiEnabled(true);
//addnetwork
if(wifiManager.startScan())//扫描可用的无线网络
{
ListscanResultList=wifiManager.getScanResults();
for(inti=0;i<scanResultList.size();i++)
{
ScanResultscanRet=scanResultList.get(i);
if(scanRet.SSID.equalsIgnoreCase("TEST"))//找到TEST
{
WifiConfigurationconfig=newWifiConfiguration();
config.SSID="\""+scanRet.SSID+"\"";
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.status=WifiConfiguration.Status.ENABLED;
intnetID=wifiManager.addNetwork(config);
booleanbRet=wifiManager.enableNetwork(netID,true);
}
}
}
<!--以下是使用wifi访问网络所需要的权限-->
android.permission.CHANGE_NETWORK_STATE//修改网络状态的权限
android.permission.CHANGE_WIFI_STATE//修改wifi状态的权限
android.permission.ACCESS_NETWORK_STATE//访问网络权限
android.permission.ACCESS_WIFI_STATE//访问wifi权
相关文章推荐
- android开发连接wifi addNetwork 返回-1
- android wifi开发 连接wifi 创建AP
- Android 开发 使用wifi连接adb
- android wifi连接开发实例
- Android开发之WIFI与网络连接处理
- Android开发之判断网络(wifi、3G)是否连接
- android WIFI连接开发
- Android WiFi开发教程(二)——WiFi的搜索和连接
- android wifi连接开发实例
- android wifi连接开发
- android wifi连接开发实例
- Android开发人员有福了---wifi连接调试
- Android 设置wifi连接应用开发
- android开发-wifi连接eclipse调试,拜拜USB
- android WIFI连接开发
- Android WIFI连接开发 WIFI工具类
- Android开发_socket编程_wifi连接电脑实现PPT控制器
- android WIFI连接开发
- android WIFI连接开发
- Android官方开发文档Training系列课程中文版:连接无线设备之通过WIFI创建P2P连接