1:首先第一要提到的就是6.0权限这方面得问题,众所周知 ,这里我就不说了,需要注意;
2:这里只说简单得连接wifi,如果需要其他功能得话,那么请看这篇文章:https://www.jianshu/p/572ac573e4b8
简书上的文章真的很好,所以请大家在简书上发表文章要负责任。
下面就是代码了,代码只有连接得方面
WifiConnect wifiConnect = new WifiConnect(this);
// 这两个参数 WIFI_SSID 和 WIFI_PASS 直接写要连接得名字和密码;
wifiConnect.addNetWork(WIFI_SSID, WIFI_PASS); // 这里就是连接;
// ssid的格式我在代码里已经写进去了,所以直接写名字就好了;
下面是 WifiConnect 的这个类;
public class WifiConnect {
private WifiManager mWifiManager;
private List<WifiConfiguration> wifiConfigurationList;
private Context mContext;
public WifiConnect() {
}
public WifiConnect(Context context) {
// 常驻
mWifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
}
public WifiConnect(List<WifiConfiguration> wifiConfigurationList, WifiManager mWifiManager) {
this.wifiConfigurationList = wifiConfigurationList;
this.mWifiManager = mWifiManager;
}
/**
* 连接wifi
*/
public void addNetWork(String SSID, String PASSW) {
int netId = -1;
if (removeWifi(SSID)) {
Log.e("sin", "移除,新建config");
netId = mWifiManager.addNetwork(createWifiInfo(SSID, PASSW));
} else {
if (getExitsWifiConfig(SSID) != null) {
Log.e("sin", "这个wifi是连接过");
netId = getExitsWifiConfig(SSID)workId;
} else {
Log.e("sin", "没连接过的,新建一个wifi配置 ");
netId = mWifiManager.addNetwork(createWifiInfo(SSID, PASSW));
}
}
Log.e("sin", "netId: " + netId);
boolean b = mWifiManager.enableNetwork(netId, true); // 无论咋这都会返回true;
Log.e("sin", "ssss: " + b);
if (!b) {
Log.e("SSSSSSSSSSSS", "-0.0-");
// 如果这里失败,再从新获取manager 重新配置config;
mWifiManager = (WifiManager) mContext.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
// 配置config
} else {
Log.e("SIN", "success");
}
}
/**
* 存在过的wifiConfiguration
*/
public WifiConfiguration getExitsWifiConfig(String SSID) {
wifiConfigurationList = mWifiManager.getConfiguredNetworks();
for (WifiConfiguration wifiConfiguration : wifiConfigurationList) {
if (wifiConfiguration.SSID.equals("\"" + SSID + "\"")) {
return wifiConfiguration;
}
}
return null;
}
public boolean removeWifi(int netId) {
//
return mWifiManager.removeNetwork(netId);
}
/**
* config里存在; 在mWifiManager移除;
*/
public boolean removeWifi(String SSID) {
if (getExitsWifiConfig(SSID) != null) {
return removeWifi(getExitsWifiConfig(SSID)workId);
} else {
return false;
}
}
/**
* CHUANJian
*
* @param SSID
* @param password
* @return
*/
public WifiConfiguration createWifiInfo(String SSID, String password) {
WifiConfiguration config = new WifiConfiguration();
if (config != null) {
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
config.SSID = "\"" + SSID + "\"";
//如果有相同配置的,就先删除
WifiConfiguration tempConfig = getExitsWifiConfig(SSID);
if (tempConfig != null) {
mWifiManager.removeNetwork(tempConfigworkId);
mWifiManager.saveConfiguration();
}
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;
Log.e("sin", "config: " + config.SSID + " config: " + config.toString());
return config;
} else {
Log.e("SSS", "WOCAO NULL !!!");
return null;
}
}
}
这里就可以了。
更多推荐
android WIFI连接,解决6.0及以上无法连接问题
发布评论