/** 本文中代码仅供参考, 无法直接运行 **/
权限申明:
1. 扫描WIFI热点
调用WifiManager.startScan()
final int MSG_SCAN_START = 0x01;
//final int MSG_SCAN_COMPLETE = 0x02;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (MSG_SCAN_START == msg.what) {
if(debugScan)ALog.d(TAG, "start scan wifi access point");
mWifiManager.startScan();//启动扫描
//we should start scan again to refresh wifi list state after every 10 sec
mHandler.sendEmptyMessageDelayed(MSG_SCAN_START, 10 * 1000);
}
/* if (MSG_SCAN_COMPLETE == msg.what) {
onWifiScanSuccess();
}*/
};
};
监听WIFI状态变化
IntentFilter filter = new IntentFilter();
//WIFI 开关
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
//网络连接状态,
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
//扫描结果
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
wifiReceiver = new WifiChangedReceiver();
registerReceiver(wifiReceiver, filter);
扫描完成后,通过获取ScanResult来显示列表,
//ScanResult 中, 包含了SSID, BSSID, 加密码类型等信息.
mWifiManager.getScanResults();
要完整的状态还需要配合 WifiConfiguration一起:
//如验证失败原因
switch (mConfig.disableReason) {
case WifiConfiguration.DISABLED_AUTH_FAILURE:
summary.append(context.getString(R.string.wifi_disabled_password_failure));
break;
case WifiConfiguration.DISABLED_DHCP_FAILURE:
case WifiConfiguration.DISABLED_DNS_FAILURE:
summary.append(context.getString(R.string.wifi_disabled_network_failure));
break;
case WifiConfiguration.DISABLED_UNKNOWN_REASON:
case WifiConfiguration.DISABLED_ASSOCIATION_REJECT:
summary.append(context.getString(R.string.wifi_disabled_generic));
break;
2. WIFI开关
//开关的代码比较简单:
WifiManager.setWifiEnabled(boolean open)
状态监听:
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {// 这个监听wifi的打开与关闭,与wifi的连接无关
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
Log.i(TAG, "wifiState" + wifiState);
switch (wifiState) {
case WifiManager.WIFI_STATE_DISABLED:
break;
case WifiManager.WIFI_STATE_DISABLING:
break;
case WifiManager.WIFI_STATE_ENABLED:{
Log.i(TAG, "WIFI_STATE_ENABLED");
mHandler.sendEmptyMessageDelayed(MSG_SCAN_START, 1000);
break;
}
//
}
3. WIFI热点连接
/***
* 配置要连接的WIFI热点信息
* @param SSID
* @param password
* @param type 加密类型
* @return
*/
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 + "\"";
/*//增加热点时候 如果已经存在SSID 则将SSID先删除以防止重复SSID出现
WifiConfiguration tempConfig = wifiAdmin.IsExsits(SSID);
if (tempConfig != null) {
settingWifimin.AdwifiManager.removeNetwork(tempConfig.networkId);
} */
// 分为三种情况:没有密码 用wep加密 用wpa加密
if (type == SECURITY_NONE) { // WIFICIPHER_NOPASS
config.wepKeys[0] = "";
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.wepTxKeyIndex = 0;
} else if (type == SECURITY_WEP) { // WIFICIPHER_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 == SECURITY_WPA) { // WIFICIPHER_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.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
config.status = WifiConfiguration.Status.ENABLED; */
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;
}
/*config.proxySettings = ProxySettings.NONE;
config.ipAssignment = m_ipAssignment;
config.linkProperties = new LinkProperties(m_linkProperties);*/
return config;
}
连接:
int networkId = WifiManager.addNetwork(WifiConfiguration config);
//若已存在, 无需调用, 当然, 也可调用remove
WifiManager.removeNetwork(int networkId);
//最后
WifiManager.enableNetwork(int NetworkId, boolean disableOther)
断开连接:
//获取networkId
public int getNetworkIdFromConfigByName(String name){
int id = -1;
List mWifiConfigList = WifiManager.getConfiguredNetworks();
for(WifiConfiguration conf : mWifiConfigList){
if(conf.SSID.equals(name)){
return conf.networkId;
}
}
return id;
}
//删除WIFI并断开:
private boolean RemoveWifi(int netId){
return mWifiManager.removeNetwork(netId);
}
蓝牙部分待续.....