您的位置:首页 > 移动开发 > Android开发

android自动连接指定wifi

2014-02-25 14:39 741 查看

publicclassWifiAutoConnectManager{


privatestaticfinalStringTAG=WifiAutoConnectManager.class.getSimpleName();


WifiManagerwifiManager;


//定义几种加密方式,一种是WEP,一种是WPA,还有没有密码的情况
publicenumWifiCipherType{
WIFICIPHER_WEP,WIFICIPHER_WPA,WIFICIPHER_NOPASS,WIFICIPHER_INVALID
}


//构造函数
publicWifiAutoConnectManager(WifiManagerwifiManager){
this.wifiManager=wifiManager;
}


//提供一个外部接口,传入要连接的无线网
publicvoidconnect(Stringssid,Stringpassword,WifiCipherTypetype){
Threadthread=newThread(newConnectRunnable(ssid,password,type));
thread.start();
}


//查看以前是否也配置过这个网络
privateWifiConfigurationisExsits(StringSSID){
List<WifiConfiguration>existingConfigs=wifiManager.getConfiguredNetworks();
for(WifiConfigurationexistingConfig:existingConfigs){
if(existingConfig.SSID.equals("\""+SSID+"\"")){
returnexistingConfig;
}
}
returnnull;
}


privateWifiConfigurationcreateWifiInfo(StringSSID,StringPassword,WifiCipherTypeType){
WifiConfigurationconfig=newWifiConfiguration();
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
config.SSID="\""+SSID+"\"";
//nopass
if(Type==WifiCipherType.WIFICIPHER_NOPASS){
config.wepKeys[0]="";
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.wepTxKeyIndex=0;
}
//wep
if(Type==WifiCipherType.WIFICIPHER_WEP){
if(!TextUtils.isEmpty(Password)){
if(isHexWepKey(Password)){
config.wepKeys[0]=Password;
}else{
config.wepKeys[0]="\""+Password+"\"";
}
}
config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
config.allowedKeyManagement.set(KeyMgmt.NONE);
config.wepTxKeyIndex=0;
}
//wpa
if(Type==WifiCipherType.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;
}
returnconfig;
}


//打开wifi功能
privatebooleanopenWifi(){
booleanbRet=true;
if(!wifiManager.isWifiEnabled()){
bRet=wifiManager.setWifiEnabled(true);
}
returnbRet;
}


classConnectRunnableimplementsRunnable{
privateStringssid;


privateStringpassword;


privateWifiCipherTypetype;


publicConnectRunnable(Stringssid,Stringpassword,WifiCipherTypetype){
this.ssid=ssid;
this.password=password;
this.type=type;
}


@Override
publicvoidrun(){
//打开wifi
openWifi();
//开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi
//状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句
while(wifiManager.getWifiState()==WifiManager.WIFI_STATE_ENABLING){
try{
//为了避免程序一直while循环,让它睡个100毫秒检测……
Thread.sleep(100);
}catch(InterruptedExceptionie){
}
}


WifiConfigurationwifiConfig=createWifiInfo(ssid,password,type);
//
if(wifiConfig==null){
Log.d(TAG,"wifiConfigisnull!");
return;
}


WifiConfigurationtempConfig=isExsits(ssid);


if(tempConfig!=null){
wifiManager.removeNetwork(tempConfig.networkId);
}


intnetID=wifiManager.addNetwork(wifiConfig);
booleanenabled=wifiManager.enableNetwork(netID,true);
Log.d(TAG,"enableNetworkstatusenable="+enabled);
booleanconnected=wifiManager.reconnect();
Log.d(TAG,"enableNetworkconnected="+connected);
}
}


privatestaticbooleanisHexWepKey(StringwepKey){
finalintlen=wepKey.length();


//WEP-40,WEP-104,andsomevendorsusing256-bitWEP(WEP-232?)
if(len!=10&&len!=26&&len!=58){
returnfalse;
}


returnisHex(wepKey);
}


privatestaticbooleanisHex(Stringkey){
for(inti=key.length()-1;i>=0;i--){
finalcharc=key.charAt(i);
if(!(c>='0'&&c<='9'||c>='A'&&c<='F'||c>='a'&&c<='f')){
returnfalse;
}
}


returntrue;
}
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: