package com.jacky.compatible.launcher.utils;
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.net.wifi.WifiManager.WifiLock;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
/*
* 自定义wIFI管理类
*/
public class WiFiAdmin {
// wifimanager对象
private final WifiManager mWifiManager;
// wifiInfo对象
private WifiInfo mWifiInfo;
// 扫描出的网络连接列表
private List<ScanResult> mWifiList;
// 网络连接列表
private List<WifiConfiguration> mWifiConfigurations;
private WifiLock mwifiLock;
public WiFiAdmin(Context context) {
// 取得wifimannager
mWifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
// 取得wifiinfo
mWifiInfo = mWifiManager.getConnectionInfo();
mWifiList = new ArrayList<ScanResult>();
mWifiConfigurations = new ArrayList<WifiConfiguration>();
}
// 打开WIFI
public void OpenWifi() {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
}
// 关闭WIFI
public void CloseWifi() {
if (mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
}
}
// 得到WIFI当前状态
public int GetWifiState() {
return mWifiManager.getWifiState();
}
// 锁定wifilock
public void AcquireWifiLock() {
mwifiLock.acquire();
}
// 释放wifilock
public void RelaseWifiLock() {
if (mwifiLock.isHeld()) {
mwifiLock.release();
}
}
// 创建一个wifilock
public void CreatWifilock() {
mwifiLock = mWifiManager.createWifiLock("WIFILOCK");
}
// 得到配置好的网络
public List<WifiConfiguration> getConfigurations() {
return mWifiConfigurations;
}
// 指定配置好的网络进行连接
public void ConnectConfiguration(int index) {
// 输入的索引大于配置的索引则返回
if (index > mWifiConfigurations.size()) {
return;
}
// 连接到指定的网络
mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId,
true);
}
public void StartScan() {
mWifiManager.startScan();
// 得到扫描结果
mWifiList = mWifiManager.getScanResults();
// 得到配置好的网络连接
mWifiConfigurations = mWifiManager.getConfiguredNetworks();
Log.v("mWifiManager", mWifiManager + "");
Log.v("mWifiList", mWifiList + "");
Log.v("mWifiConfigurations", mWifiConfigurations + "");
}
public void getWifiConnectInfo() {
mWifiInfo = mWifiManager.getConnectionInfo();
}
// 得到网络列表
public List<ScanResult> GetWifilist() {
return mWifiList;
}
// 查看扫描结果
public StringBuilder CheckupScan() {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < mWifiList.size(); i++) {
stringBuilder
.append("Index_" + (i + 1) + ":");
// 将Scanresult转换成一个字符串包
// 其中包括:BSSID SSID capabilities frequency level
stringBuilder.append(mWifiList.get(i).toString());
stringBuilder.append("/n");
}
return stringBuilder;
}
// 得到MAC地址
public String GetMacAdress() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
}
//得到SSID
public String GetSSID() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.getSSID();
}
// 得到接入点的BSSID
public String GetBSSID() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
}
// 得到ip地址
public int GetIpAdress() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
}
// 得打连接的ID
public int GetNetworkID() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
}
// 得到wifiinfo的所有信息包
public String GetWifiinfo() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
}
// 添加一个网络并连接
public int AddNetwork(WifiConfiguration configuration) {
int configurationId = mWifiManager.addNetwork(configuration);
boolean b = mWifiManager.enableNetwork(configurationId, true);
System.out.println("configurationId---------->" + configurationId);
System.out.println("b---------->" + b);
return configurationId;
}
// 断开指定ID的网络
public void disconnectWifi(int networkid) {
mWifiManager.disableNetwork(networkid);
mWifiManager.disconnect();
}
public WifiConfiguration CreatConfiguration(String ssid, String password,
int type) {
WifiConfiguration configuration = new WifiConfiguration();
configuration.allowedAuthAlgorithms.clear();
configuration.allowedGroupCiphers.clear();
configuration.allowedKeyManagement.clear();
configuration.allowedPairwiseCiphers.clear();
configuration.allowedProtocols.clear();
configuration.SSID = "\"" + ssid + "\"";
WifiConfiguration tempConfiguration = IsExits(ssid, mWifiManager);
if (tempConfiguration != null) {
mWifiManager.removeNetwork(tempConfiguration.networkId);
}
// WIFICIPHER_NOPASS
if (type == 1) {
configuration.wepKeys[0] = "";
configuration.allowedKeyManagement
.set(WifiConfiguration.KeyMgmt.NONE);
configuration.wepTxKeyIndex = 0;
}
// WIFICIPHER_WEP
if (type == 2) {
configuration.hiddenSSID = true;
configuration.wepKeys[0] = "\"" + password + "\"";
configuration.allowedAuthAlgorithms
.set(WifiConfiguration.AuthAlgorithm.SHARED);
configuration.allowedGroupCiphers
.set(WifiConfiguration.GroupCipher.CCMP);
configuration.allowedGroupCiphers
.set(WifiConfiguration.GroupCipher.TKIP);
configuration.allowedGroupCiphers
.set(WifiConfiguration.GroupCipher.WEP40);
configuration.allowedGroupCiphers
.set(WifiConfiguration.GroupCipher.WEP104);
configuration.allowedKeyManagement
.set(WifiConfiguration.KeyMgmt.NONE);
configuration.wepTxKeyIndex = 0;
}
// WIFICIPHER_WPA
if (type == 3) {
configuration.preSharedKey = "\"" + password + "\"";
configuration.hiddenSSID = true;
configuration.allowedAuthAlgorithms
.set(WifiConfiguration.AuthAlgorithm.OPEN);
configuration.allowedGroupCiphers
.set(WifiConfiguration.GroupCipher.TKIP);
configuration.allowedKeyManagement
.set(WifiConfiguration.KeyMgmt.WPA_PSK);
configuration.allowedPairwiseCiphers
.set(WifiConfiguration.PairwiseCipher.TKIP);
configuration.allowedGroupCiphers
.set(WifiConfiguration.GroupCipher.CCMP);
configuration.allowedPairwiseCiphers
.set(WifiConfiguration.PairwiseCipher.CCMP);
configuration.status = WifiConfiguration.Status.ENABLED;
}
return configuration;
}
//判断wifi是否存在
private static WifiConfiguration IsExits(String ssid, WifiManager manager) {
List<WifiConfiguration> exitsConfigurations = manager
.getConfiguredNetworks();
for (WifiConfiguration configuration : exitsConfigurations) {
if (configuration.SSID.equals("\"" + ssid + "\"")) {
return configuration;
}
}
return null;
}
public WifiManager getWifiManager() {
return mWifiManager;
}
public boolean isWifiEnable() {
return mWifiManager.isWifiEnabled();
}
//转换IP地址
public String GetIntIp() {
int i = GetIpAdress();
if (i == 0) {
return "";
}
return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)
+ "." + ((i >> 24) & 0xFF);
}
}