android-wifi连接

来源:互联网 发布:在线网络取代电视 编辑:程序博客网 时间:2024/05/09 15:49
package com.skyworthdigital.factory.util;


import java.util.List;


import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.util.Log;


public class WifiUtil {


private static final String TAG = "wifi";


// private final String TARGET_WIFI_SSID = "HPM_TEST";


Context mContext;
WifiManager mWifiManager;
// WifiConfiguration mWifiConfiguration;
List<ScanResult> mWifiScanResultLists;
List<WifiConfiguration> mWifiHotSpotLists;


WifiInfo mWifiInfo;


WifiConfiguration mTargetWifiCfg;
int mNetworkID;
String mSSID;


public WifiUtil(Context c) {


Log.d(TAG, " Construct...");
this.mContext = c;


}


/**
* Description 打开wifi

* @return void
*/
public void openWifi() {


mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
if (!mWifiManager.isWifiEnabled()) {
if (mWifiManager.setWifiEnabled(true)) {
Log.d(TAG, " setWifiEnabled...success");
} else {
Log.d(TAG, " setWifiEnabled...failure");
}
} else {
Log.d(TAG, "before have setWifiEnabled ...");
}
}


/**
* Description closewifi

* @return void
*/
public void closeWifi() {


if (mWifiManager.isWifiEnabled()) {
if (mWifiManager.setWifiEnabled(false)) {
Log.d(TAG, " disableWifiEnabled...success");
} else {
Log.d(TAG, " disableWifiEnabled...failure");
}
}
}


public WifiInfo getWifiInfo() {


if (mWifiManager == null) {
mWifiManager = (WifiManager) this.mContext.getSystemService(Context.WIFI_SERVICE);
}
WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
return wifiInfo;
}


public List<ScanResult> getWifiScanResult() {


List<ScanResult> wifiScanResultLists = mWifiManager.getScanResults();
return wifiScanResultLists;
}


public List<WifiConfiguration> getWifiAllHotSpot() {


List<WifiConfiguration> wifiHotSpotLists = mWifiManager.getConfiguredNetworks();


for (WifiConfiguration wifiConfiguration : wifiHotSpotLists) {
Log.d(TAG, " wifiConfiguration.SSID(hotSpot):" + wifiConfiguration.SSID);
}
return wifiHotSpotLists;
}


/**
* Description 指定热点是否已配置(注册)

* @return true表示已注册,否则未注册
*/


public boolean isConfigHotSpot() {


mWifiHotSpotLists = getWifiAllHotSpot();
for (WifiConfiguration wifiConfiguration : mWifiHotSpotLists) {
if (wifiConfiguration.SSID.equals("\"" + mSSID + "\"")) {
Log.d(TAG, "before have cfg this hotspot:" + wifiConfiguration.SSID);
return true;


}
}
return false;


}


/**
* Description 是否能扫描到目标wifi

* @return true表示能,false表示不能检测到
*/


public boolean isScanTargetWifi() {


mWifiScanResultLists = getWifiScanResult();
if (mWifiScanResultLists != null)
for (ScanResult wifiScanResultList : mWifiScanResultLists) {
Log.d(TAG, " wifiScanResultList.SSID:" + wifiScanResultList.SSID);
// Log.d(TAG, " wifiScanResultList.BSSID:" +
// wifiScanResultList.BSSID);
if (wifiScanResultList.SSID.equals(mSSID)) {
return true;
}
}


return false;


}


/**
* Description 指定热点是否已配置(注册)

* @param ssid
* @return null:not cfg this hotspot
*/
public WifiConfiguration isExistWifiConfiguration(String ssid) {


mWifiHotSpotLists = getWifiAllHotSpot();
for (WifiConfiguration exsitWifiConfiguration : mWifiHotSpotLists) {
Log.d(TAG, " wifiConfiguration.SSID:" + exsitWifiConfiguration.SSID);
if (exsitWifiConfiguration.SSID.equals("\"" + ssid + "\"")) {
// Log.d(TAG, " addNetwork...");
// wcfgID = wifiMng.addNetwork(wifiConfiguration);
// wifiMng.enableNetwork(wcfgID, true);
return exsitWifiConfiguration;


}
}
return null;


}


/**
* 创建该热点

* @param ssid
* @return WifiConfiguration
*/
public WifiConfiguration createWifiCfg(String ssid, String password, int method) {


// closeWifi();
Log.d(TAG, " createWifiCfg..........................");
WifiConfiguration wifiCfg = new WifiConfiguration();


wifiCfg.allowedAuthAlgorithms.clear();
wifiCfg.allowedGroupCiphers.clear();
wifiCfg.allowedKeyManagement.clear();
wifiCfg.allowedPairwiseCiphers.clear();
wifiCfg.allowedProtocols.clear();


wifiCfg.SSID = "\"" + ssid + "\"";


switch (method) {
case 0:/* no password */
Log.d(TAG,
" createWifiCfg..........................no password ");
wifiCfg.wepKeys[0] = "";
wifiCfg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wifiCfg.wepTxKeyIndex = 0;
break;
case 1:/* have password :WPA */
Log.d(TAG,
" createWifiCfg..........................have password :WPA");
wifiCfg.preSharedKey = "\"" + password + "\"";
wifiCfg.hiddenSSID = true;
wifiCfg.allowedAuthAlgorithms
.set(WifiConfiguration.AuthAlgorithm.OPEN);
wifiCfg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wifiCfg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wifiCfg.allowedPairwiseCiphers
.set(WifiConfiguration.PairwiseCipher.TKIP);


wifiCfg.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
// wifiCfg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
// wifiCfg.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);


wifiCfg.status = WifiConfiguration.Status.ENABLED;
break;
case 2:/* have password :WEP */
Log.d(TAG,
" createWifiCfg..........................have password :WEP");
wifiCfg.preSharedKey = "\"" + password + "\"";
wifiCfg.hiddenSSID = true;
wifiCfg.allowedAuthAlgorithms
.set(WifiConfiguration.AuthAlgorithm.SHARED);
wifiCfg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wifiCfg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wifiCfg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
wifiCfg.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
wifiCfg.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
wifiCfg.wepTxKeyIndex = 0;
break;
default:
wifiCfg = null;
break;
}


WifiConfiguration tempWifiCfg = isExistWifiConfiguration(ssid);
if (tempWifiCfg != null) {
mWifiManager.removeNetwork(tempWifiCfg.networkId);
}
return wifiCfg;
}


/**
* Description 连接指定热点

* @param ssid
*            :连接指定热点
* @param password
* @param method
*            :0:no password,1:have password,other:unkown
* @return
*/
public synchronized void connectToTargetWifi(String ssid, String password, int method) {


mSSID = ssid;
openWifi();


// 开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi
// 状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句
// while (mWifiManager.getWifiState() ==
// WifiManager.WIFI_STATE_ENABLING) {
// try {
// // 为了避免程序一直while循环,让它睡个100毫秒在检测……
// Thread.currentThread();
// Thread.sleep(100);
// } catch (InterruptedException ie) {
// }
// }


if (!isScanTargetWifi()) {
Log.e(TAG, "ScanTargetWifi(hotSpot) ...................failure...................");
return;
} else {
Log.d(TAG, "ScanTargetWifi ...................success");
if (!isConfigHotSpot()) {/* 是否以前配置过该热点 */
mTargetWifiCfg = createWifiCfg(ssid, password, method);
}


mNetworkID = mWifiManager.addNetwork(mTargetWifiCfg);
Log.d(TAG, "addNetwork:mTargetWifiCfg->" + mTargetWifiCfg);
Log.d(TAG, "addNetwork:mNetworkID->" + mNetworkID);
mWifiManager.enableNetwork(mNetworkID, true);
mWifiManager.reassociate();
mWifiManager.reconnect();
// if (mWifiManager.getConfiguredNetworks() != null ||
// mWifiManager.getConfiguredNetworks().size() > 0)
// if (mWifiManager.getConfiguredNetworks().get(mNetworkID).status
// == 0)
// Log.d(TAG, "..............Wifi connect success.............");
// else
// Log.d(TAG, "..............Wifi connect failure.............");


}
}

}


private void wifiWAPTest() {


// TODO Auto-generated method stub
WifiUtil mWifiUtil = new WifiUtil(FactoryActivity.this);
String password = "*******";
String ssid = "D-Link_DIR-600A";
int method = 1;
mWifiUtil.connectToTargetWifi(ssid, password, method);


}

0 0
原创粉丝点击