0,目标
APP中实现扫WIFI分享码自动连接WIFI功能
1,前提条件
设备需要有个扫码器(摄像头拍照识别也行),APP调用扫码器读取WIFI连接分享码。
2,增加权限
在AndroidManifest.xml中增加权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3,参数检查
扫码成功后,对内容进行一个基本的判断,确认扫码数据中有P和T的参数文章来源:https://www.toymoban.com/news/detail-703088.html
//WIFI连接
if (strResult.contains("P:") && strResult.contains("T:")) {// 自动连接wifi
ConnectWifi(strResult);
}
4,WIFI连接调用
private void ConnectWifi(String strResult)
{
//取连接参数
String passwordTemp = strResult.substring(strResult
.indexOf("P:"));
password = passwordTemp.substring(2,
passwordTemp.indexOf(";"));
String netWorkTypeTemp = strResult.substring(strResult
.indexOf("T:"));
netWorkType = netWorkTypeTemp.substring(2,
netWorkTypeTemp.indexOf(";"));
String netWorkNameTemp = strResult.substring(strResult
.indexOf("S:"));
netWorkName = netWorkNameTemp.substring(2,
netWorkNameTemp.indexOf(";"));
WifiAdmin wifiAdmin = new WifiAdmin(MainActivity.this);
if (!wifiAdmin.mWifiManager.isWifiEnabled()) {
Toast.makeText(this, "开启wifi设置", Toast.LENGTH_LONG).show();
wifiAdmin.openWifi();
}
int net_type = 0x13;
if (netWorkType.compareToIgnoreCase("wpa") == 0) {
net_type = WifiAdmin.TYPE_WPA;// wpa
} else if (netWorkType.compareToIgnoreCase("wep") == 0) {
net_type = WifiAdmin.TYPE_WEP;// wep
} else {
net_type = WifiAdmin.TYPE_NO_PASSWD;// 无加密
}
boolean bConnect = wifiAdmin.addNetwork(netWorkName,password,net_type);//连接
if(bConnect)
{
Toast.makeText(this, "网络连接成功", Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "网络连接失败", Toast.LENGTH_LONG).show();
}
}
5,WIFI连接类文章来源地址https://www.toymoban.com/news/detail-703088.html
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.util.Log;
import java.util.List;
/**
* Created by cmos.
*/
public class WifiAdmin {
private static String TAG="WifiManger";
public static final int TYPE_NO_PASSWD = 0x11;
public static final int TYPE_WEP = 0x12;
public static final int TYPE_WPA = 0x13;
public WifiManager mWifiManager;
private WifiInfo mWifiInfo;
public WifiAdmin(Context context){
mWifiManager= (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
// mWifiInfo = mWifiManager.getConnectionInfo();
}
// 添加一个网络并连接
public boolean addNetwork(WifiConfiguration wifi){
int netId=mWifiManager.addNetwork(wifi);
return mWifiManager.enableNetwork(netId,true);
}
public boolean addNetwork(String ssid, String passwd, int type) {
if (ssid == null || passwd == null || ssid.equals("")) {
Log.e(TAG, "addNetwork() ## nullpointer error!");
return false ;
}
if (type != TYPE_NO_PASSWD && type != TYPE_WEP && type != TYPE_WPA) {
Log.e(TAG, "addNetwork() ## unknown type = " + type);
}
return addNetwork(createWifiInfo(ssid, passwd, type));
}
public WifiConfiguration createWifiInfo(String SSID, String password, int type) {
Log.e(TAG, "SSID = " + SSID + "## Password = " + password + "## Type = " + type);
WifiConfiguration config = new WifiConfiguration();
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
config.SSID = "\"" + SSID + "\"";
WifiConfiguration tempConfig = this.IsExsits(SSID);
if (tempConfig != null) {
//如果已存在该SSID的wifi
mWifiManager.removeNetwork(tempConfig.networkId);
}
// 分为三种情况:1没有密码2用wep加密3用wpa加密
if (type == TYPE_NO_PASSWD) {// 没有密码
config.wepKeys[0] = "";
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.wepTxKeyIndex = 0;
} else if (type == TYPE_WEP) { // wep加密
config.hiddenSSID = true;
config.wepKeys[0] = "\"" + password + "\"";
config.allowedAuthAlgorithms
.set(WifiConfiguration.AuthAlgorithm.SHARED);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
config.allowedGroupCiphers
.set(WifiConfiguration.GroupCipher.WEP104);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.wepTxKeyIndex = 0;
} else if (type == TYPE_WPA) { // 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;
}
return config;
}
//检测该SSID是否已存在
private WifiConfiguration IsExsits(String SSID) {
List<WifiConfiguration> existingConfigs = mWifiManager.getConfiguredNetworks();
for (WifiConfiguration existingConfig : existingConfigs) {
if (existingConfig.SSID.equals("\"" + SSID + "\"")) {
return existingConfig;
}
}
return null;
}
// 打开WIFI
public void openWifi() {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
}
// 关闭WIFI
public void closeWifi() {
if (mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
}
}
}
到了这里,关于Android扫码连接WIFI实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!