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

// 网络连接列表

private List mWifiConfiguration;

// 定义一个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 getConfiguration() {

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 getWifiList() {

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 existingConfigs = mWifiManager

.getConfiguredNetworks();

if (existingConfigs == null) {

return null;

} else {

Log.e(, "existingConfigs==" + existingConfigs);

for (WifiConfiguration existingConfig : existingConfigs) {

if ((""" + SSID + """)) {

return existingConfig;

}

}

}

return null;

}

}