2024年1月13日发(作者:)
自动连接指定wifi(无密码方式错误)
/**
* 网上好多自动连接WIFI的资料都同一个错误,估计大家都是抄的吧,但是都有一个问题,那就是无密码方式连接不上,后来终于找到解决办法,给大家共享一下
*/
package ;
import ;
import tivity;
import t;
import sult;
import nfiguration;
import fo;
import nager;
import ck;
import ;
/**
* 打开WIFI,自动连接wells网络
*
* @author liuyanping
*
* 2014年7月18日
*/
public class OpenWifi {
// 定义WifiManager对象
public WifiManager mWifiManager;
// 定义WifiInfo对象
private WifiInfo mWifiInfo;
// 扫描出的网络连接列表
private List
// 网络连接列表
private List
// 定义一个WifiLock
WifiLock mWifiLock;
/**
* 构造器
*/
public OpenWifi(Context context) {
// 取得WifiManager对象
mWifiManager = (WifiManager) context
.getSystemService(_SERVICE);
// 取得WifiInfo对象
mWifiInfo = nectionInfo();
}
/**
* 打开WIFI
*/
public void openWifi() {
if (!Enabled()) {
iEnabled(true);
}
}
/**
* 关闭WIFI
*/
public void closeWifi() {
if (Enabled()) {
iEnabled(false);
}
}
/**
* 检查当前WIFI状态
*
* @return
*/
public int checkState() {
return iState();
}
/**
* 锁定WifiLock
*/
public void acquireWifiLock() {
e();
}
/**
* 解锁WifiLock
*/
public void releaseWifiLock() {
// 判断时候锁定
if (()) {
e();
}
}
/**
* 创建一个WifiLock
*/
public void creatWifiLock() {
mWifiLock = WifiLock("Test");
}
/**
* 得到配置好的网络
*
* @return
*/
public List
return mWifiConfiguration;
}
/**
* 提供一个外部接口,传入要连接的无线网
*
* @param ssid
* @param password
* @param type
*/
public void connect(String ssid, String password, int type) {
Thread thread = new Thread(new ConnectRunnable(ssid, password, type));
();
}
class ConnectRunnable implements Runnable {
private static final String TAG = "ConnectRunnable====";
private String ssid;
private String password;
private int type;
public ConnectRunnable(String ssid, String password, int type) {
= ssid;
rd = password;
= type;
}
@Override
public void run() {
// 打开wifi
openWifi();
// 开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi
// 状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句
while (iState() == _STATE_ENABLING) {
try {
// 为了避免程序一直while循环,让它睡个100毫秒检测……
(100);
} catch (InterruptedException ie) {
}
}
WifiConfiguration wifiConfig = CreateWifiInfo(ssid, password, type);
//
if (wifiConfig == null) {
Log.d(TAG, "wifiConfig is null!");
return;
}
WifiConfiguration tempConfig = IsExsits(ssid);
if (tempConfig != null) {
Network(kId);
}
int netID = work(wifiConfig);
boolean enabled = Network(netID, true);
Log.d(TAG, "enableNetwork status enable=" + enabled);
boolean connected = ect();
Log.d(TAG, "enableNetwork connected=" + connected);
}
}
/**
* 指定配置好的网络进行连接
*
* @param index
*/
public void connectConfiguration(int index) {
// 索引大于配置好的网络索引返回
if (index > ()) {
return;
}
// 连接配置好的指定ID的网络
Network((index).networkId,
true);
}
public void startScan() {
can();
// 得到扫描结果
mWifiList = nResults();
// 得到配置好的网络连接
mWifiConfiguration = figuredNetworks();
}
/**
* 得到网络列表
*/
public List
return mWifiList;
}
/**
* 查看扫描结果
*
* @return
*/
public StringBuilder lookUpScan() {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < (); i++) {
stringBuilder
.append("Index_" + new Integer(i + 1).toString() + ":");
// 将ScanResult信息转换成一个字符串包
// 其中把包括:BSSID、SSID、capabilities、frequency、level
(((i)).toString());
("/n");
}
return stringBuilder;
}
/**
* 得到MAC地址
*
* @return
*/
public String getMacAddress() {
return (mWifiInfo == null) ? "NULL" : Address();
}
/**
* 得到接入点的BSSID
*
* @return
*/
public String getBSSID() {
return (mWifiInfo == null) ? "NULL" : ID();
}
/**
* 得到IP地址
*
* @return
*/
public int getIPAddress() {
return (mWifiInfo == null) ? 0 : ddress();
}
/**
* 得到连接的ID
*
* @return
*/
public int getNetworkId() {
return (mWifiInfo == null) ? 0 : workId();
}
/**
* 得到WifiInfo的所有信息包
*
* @return
*/
public String getWifiInfo() {
return (mWifiInfo == null) ? "NULL" : ng();
}
/**
* 添加一个网络并连接
*
* @param wcg
*/
public void addNetwork(WifiConfiguration wcg) {
int wcgID = work(wcg);
boolean b = Network(wcgID, true);
n("a--" + wcgID);
n("b--" + b);
}
/**
* 断开指定ID的网络
*
* @param netId
*/
public void disconnectWifi(int netId) {
eNetwork(netId);
nect();
}
/**
* 获取SSID(网络名称)
*
* @return
*/
public String getSSID() {
return (mWifiInfo == null) ? null : D();
}
/**
* 然后是一个实际应用方法,只验证过没有密码的情况:
*
* @param SSID
* @param Password
* @param Type
* @return
*/
// 分为三种情况:1没有密码2用wep加密3用wpa加密
public WifiConfiguration CreateWifiInfo(String SSID, String Password,
int Type) {
WifiConfiguration config = new WifiConfiguration();
();
();
();
();
();
= """ + SSID + """;
/*
* WifiConfiguration tempConfig = ts(SSID); if (tempConfig !=
* null) { Network(kId); }
*/
if (Type == 1) // WIFICIPHER_NOPASS
{
// s[0] = "";
();
// eyIndex = 0;
// 网上的方法大都写了红色部分,一定要删掉这两句才能连接上
}
if (Type == 2) // WIFICIPHER_WEP
{
SSID = true;
s[0] = """ + Password + """;
dAuthAlgorithms
.set();
();
();
(40);
dGroupCiphers
.set(104);
();
eyIndex = 0;
}
if (Type == 3) // WIFICIPHER_WPA
{
redKey = """ + Password + """;
SSID = true;
dAuthAlgorithms
.set();
();
(_PSK);
dPairwiseCiphers
.set();
// ();
();
dPairwiseCiphers
.set();
= D;
}
return config;
}
/**
* 查看以前是否也配置过这个网络
*
* @param SSID
* @return
*/
private WifiConfiguration IsExsits(String SSID) {
List
.getConfiguredNetworks();
if (existingConfigs == null) {
return null;
} else {
Log.e(, "existingConfigs==" + existingConfigs);
for (WifiConfiguration existingConfig : existingConfigs) {
if ((""" + SSID + """)) {
return existingConfig;
}
}
}
return null;
}
}


发布评论