Java 以编程方式连接到wifi网络
我正在尝试连接到选定的wifi网络(从UI),但无法连接到该网络 这是我的密码:Java 以编程方式连接到wifi网络,java,android,wifi,android-wifi,Java,Android,Wifi,Android Wifi,我正在尝试连接到选定的wifi网络(从UI),但无法连接到该网络 这是我的密码: private boolean addNetworkAndActivate(ScanResult scanResult, String password) { WifiConfiguration wc = null; List<WifiConfiguration> configs = mainWifi.getConfiguredNetworks();
private boolean addNetworkAndActivate(ScanResult scanResult, String password) {
WifiConfiguration wc = null;
List<WifiConfiguration> configs = mainWifi.getConfiguredNetworks();
for (WifiConfiguration wifiConfiguration : configs) {
try {
if (wifiConfiguration.SSID.equals("\"" + scanResult.SSID + "\"")) {
wc = wifiConfiguration;
break;
}
} catch (Exception e) {
}
}
// not configured, create new
if (wc == null) {
wc = new WifiConfiguration();
ConfigurationSecuritiesV1 conf = new ConfigurationSecuritiesV1();
conf.setupSecurity(wc, conf.getScanResultSecurity(scanResult), password);
wc.SSID = "\"" + scanResult.SSID + "\"";
int res = mainWifi.addNetwork(wc);
if (res == -1)
return false;
if (!mainWifi.saveConfiguration())
return false;
}
mainWifi.disconnect();
boolean active = mainWifi.enableNetwork(wc.networkId, true);
// boolean test = mainWifi.reconnect();
return active;
}
public void setupSecurity(WifiConfiguration config, String security, String password) {
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
final int sec = security == null ? SECURITY_NONE : Integer.valueOf(security);
final int passwordLen = password == null ? 0 : password.length();
switch (sec) {
case SECURITY_NONE:
config.allowedKeyManagement.set(KeyMgmt.NONE);
break;
case SECURITY_WEP:
config.allowedKeyManagement.set(KeyMgmt.NONE);
config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
if (passwordLen != 0) {
// WEP-40, WEP-104, and 256-bit WEP (WEP-232?)
if ((passwordLen == 10 || passwordLen == 26 || passwordLen == 58) && password.matches("[0-9A-Fa-f]*")) {
config.wepKeys[0] = password;
} else {
config.wepKeys[0] = '"' + password + '"';
}
}
break;
case SECURITY_PSK:
config.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
if (passwordLen != 0) {
if (password.matches("[0-9A-Fa-f]{64}")) {
config.preSharedKey = password;
} else {
config.preSharedKey = '"' + password + '"';
}
}
break;
case SECURITY_EAP:
config.allowedKeyManagement.set(KeyMgmt.WPA_EAP);
config.allowedKeyManagement.set(KeyMgmt.IEEE8021X);
break;
default:
Log.d(TAG, "Invalid security type: " + sec);
}
}
private boolean addNetworkAndActivate(扫描结果扫描结果,字符串密码){
WifiConfiguration wc=null;
List configs=mainWifi.getConfiguredNetworks();
用于(WifiConfiguration WifiConfiguration:configs){
试一试{
if(wifiConfiguration.SSID.equals(“\”+scanResult.SSID+“\”)){
wc=接线配置;
打破
}
}捕获(例外e){
}
}
//未配置,创建新的
如果(wc==null){
wc=新的接线配置();
ConfigurationSecuritiesV1 conf=新的ConfigurationSecuritiesV1();
conf.setupSecurity(wc,conf.getScanResultSecurity(scanResult),密码);
wc.SSID=“\”+scanResult.SSID+“\”;
int res=mainWifi.addNetwork(wc);
如果(res==-1)
返回false;
如果(!mainWifi.saveConfiguration())
返回false;
}
mainWifi.disconnect();
boolean active=mainWifi.enableNetwork(wc.networkId,true);
//布尔测试=mainWifi.reconnect();
主动返回;
}
public void setupSecurity(WifiConfiguration配置、字符串安全性、字符串密码){
config.allowedAuthAlgorithms.clear();
config.alloweGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
final int sec=security==null?security\u NONE:Integer.valueOf(security);
final int passwordLen=password==null?0:password.length();
开关(秒){
案件保安(无):
config.allowedKeyManagement.set(keymagmt.NONE);
打破
案件安全(WEP):
config.allowedKeyManagement.set(keymagmt.NONE);
config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
if(passwordLen!=0){
//WEP-40、WEP-104和256位WEP(WEP-232?)
if((passwordLen==10 | | passwordLen==26 | | passwordLen==58)和password.matches(“[0-9A-Fa-f]*”){
config.wepKeys[0]=密码;
}否则{
config.wepKeys[0]=“密码+”;
}
}
打破
案件保安科:
config.allowedKeyManagement.set(keymmgmt.WPA\u PSK);
if(passwordLen!=0){
if(password.matches(“[0-9A-Fa-f]{64}”)){
config.preSharedKey=密码;
}否则{
config.preSharedKey='“'+密码+'”;
}
}
打破
案件安全(EAP):
config.allowedKeyManagement.set(keymmgmt.WPA_EAP);
config.allowedKeyManagement.set(keymagmt.IEEE8021X);
打破
违约:
Log.d(标记“无效安全类型:”+sec);
}
}
当我尝试使用上述代码连接时,网络会被选中,但当我在android wifi设置屏幕中看到其状态时,它会显示“网络名称”已禁用,然后它会自动连接到以前连接的网络