我一直在尝试使用两种方法按名称以编程方式连接到开放式wifi(连接门户网站)。
我使用op1,但它只能使用80%的次数。
op1:
public static void connectToWifi(Context context, String networkSSID) {
WifiConfiguration conf = new WifiConfiguration();
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiManager.addNetwork(conf);
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for (WifiConfiguration i : list) {
Log.d(TAG + " |connectToWifi()", "i.SSID=> " + i.SSID);
if (i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
wifiManager.disconnect();
wifiManager.enableNetwork(i.networkId, true);
wifiManager.reconnect();
Log.d(TAG + " |connectToWifi()", "IF > i.SSID=> " + i.SSID);
break;
}else {Log.e(TAG + " |connectToWifi()", "ELSE - FAILED TO CONNECT > i.SSID=> " + i.SSID);}
}
}//end connectToWifi
op2:来自https://stackoverflow.com/a/8818490/3792198
conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
wifiManager.addNetwork(conf);
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
for( WifiConfiguration i : list ) {
if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
wifiManager.disconnect();
wifiManager.enableNetwork(i.networkId, true);
wifiManager.reconnect();
break;
}
}
OP3:
WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = String.format("\"%s\"", ssid);
wifiConfig.preSharedKey = String.format("\"%s\"", key);
WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
//remember id
int netId = wifiManager.addNetwork(wifiConfig);
wifiManager.disconnect();
wifiManager.enableNetwork(netId, true);
wifiManager.reconnect();
或者,你有什么建议吗? 谢谢
答案 0 :(得分:2)
import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.text.TextUtils;
import android.util.Log;
import java.util.List;
/**
* ConnectionManager
*/
public class ConnectionManager {
private Context context;
private Activity activity;
private static final String WPA = "WPA";
private static final String WEP = "WEP";
private static final String OPEN = "Open";
private final static String TAG = "WiFiConnector";
public ConnectionManager(Context context) {
this.context = context;
this.activity = (Activity) context;
}
public void enableWifi() {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
new ShowToast(context, "Wifi Turned On");
}
}
public int requestWIFIConnection(String networkSSID, String networkPass) {
try {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
//Check ssid exists
if (scanWifi(wifiManager, networkSSID)) {
if (getCurrentSSID(wifiManager) != null && getCurrentSSID(wifiManager).equals("\"" + networkSSID + "\"")) {
new ShowToast(context, "Already Connected With " + networkSSID);
return Constants.ALREADY_CONNECTED;
}
//Security type detection
String SECURE_TYPE = checkSecurity(wifiManager, networkSSID);
if (SECURE_TYPE == null) {
new ShowToast(context, "Unable to find Security type for " + networkSSID);
return Constants.UNABLE_TO_FIND_SECURITY_TYPE;
}
if (SECURE_TYPE.equals(WPA)) {
WPA(networkSSID, networkPass, wifiManager);
} else if (SECURE_TYPE.equals(WEP)) {
WEP(networkSSID, networkPass);
} else {
OPEN(wifiManager, networkSSID);
}
return Constants.CONNECTION_REQUESTED;
}
/*connectME();*/
} catch (Exception e) {
new ShowToast(context, "Error Connecting WIFI " + e);
}
return Constants.SSID_NOT_FOUND;
}
private void WPA(String networkSSID, String networkPass, WifiManager wifiManager) {
WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\"" + networkSSID + "\"";
wc.preSharedKey = "\"" + networkPass + "\"";
wc.status = WifiConfiguration.Status.ENABLED;
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
int id = wifiManager.addNetwork(wc);
wifiManager.disconnect();
wifiManager.enableNetwork(id, true);
wifiManager.reconnect();
}
private void WEP(String networkSSID, String networkPass) {
}
private void OPEN(WifiManager wifiManager, String networkSSID) {
WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\"" + networkSSID + "\"";
wc.hiddenSSID = true;
wc.priority = 0xBADBAD;
wc.status = WifiConfiguration.Status.ENABLED;
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
int id = wifiManager.addNetwork(wc);
wifiManager.disconnect();
wifiManager.enableNetwork(id, true);
wifiManager.reconnect();
}
boolean scanWifi(WifiManager wifiManager, String networkSSID) {
Log.e(TAG, "scanWifi starts");
List<ScanResult> scanList = wifiManager.getScanResults();
for (ScanResult i : scanList) {
if (i.SSID != null) {
Log.e(TAG, "SSID: " + i.SSID);
}
if (i.SSID != null && i.SSID.equals(networkSSID)) {
Log.e(TAG, "Found SSID: " + i.SSID);
return true;
}
}
new ShowToast(context, "SSID " + networkSSID + " Not Found");
return false;
}
public String getCurrentSSID(WifiManager wifiManager) {
String ssid = null;
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (networkInfo.isConnected()) {
final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
if (connectionInfo != null && !TextUtils.isEmpty(connectionInfo.getSSID())) {
ssid = connectionInfo.getSSID();
}
}
return ssid;
}
private String checkSecurity(WifiManager wifiManager, String ssid) {
List<ScanResult> networkList = wifiManager.getScanResults();
for (ScanResult network : networkList) {
if (network.SSID.equals(ssid)) {
String Capabilities = network.capabilities;
if (Capabilities.contains("WPA")) {
return WPA;
} else if (Capabilities.contains("WEP")) {
return WEP;
} else {
return OPEN;
}
}
}
return null;
}
}
调用方法
ConnectionManager connectionManager=new ConnectionManager(context);
connectionManager.enableWifi();
connectionManager.requestWIFIConnection("YOUR_SSID","PASSWORD");