gpt4 book ai didi

java - Android 通过名称以编程方式连接到 Open WiFi - 这是最佳解决方案?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:03 25 4
gpt4 key购买 nike

我一直在尝试使用两种方法以编程方式按名称连接到开放式 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;
}
}

操作3:

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();

或者,您有什么建议吗?谢谢

最佳答案

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;
}




}

Call the method

ConnectionManager connectionManager=new ConnectionManager(context);
connectionManager.enableWifi();
connectionManager.requestWIFIConnection("YOUR_SSID","PASSWORD");

关于java - Android 通过名称以编程方式连接到 Open WiFi - 这是最佳解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30889089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com