最近某数字wifi连接助手更新后体积变大,广告及与wifi连接不相干的功能增加了很多,于是打算自己写个wifi助手(谁让咱是程序员呢)
1.wifi功能与硬件和网络相关,所以我们需要添加以下权限:
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
2.与WiFi功能相关的类
WifiManager:wifi管理类
WifiConfiguration:wifi配置信息类,即:手机曾经连接过的wifi且保存了密码
ScanResult:扫描周围wifi热点类,注意与WifiConfiguration的区分,这两者中有共同的信息
WifiInfo:wifi信息类
3.具体的使用过程看代码中的注释信息,调用connectToWiFi()可连接wifi
public class WifiUtil {
private String wifiName;
private String wifiPw;
private WifiManager mWifiManager;
private List<WifiConfiguration> mWifiConfigurations;
private List<ScanResult> mWifiList;
private WifiInfo mWifiInfo;
WifiLock mWifiLock;
public WifiUtil(Context context) {
mWifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
mWifiInfo = mWifiManager.getConnectionInfo();
}
public WifiUtil(Context context, String wifiName, String wifiPw) {
this(context);
this.wifiName = wifiName;
this.wifiPw = wifiPw;
}
public void openWifi() {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
}
public void closeWifi() {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
}
}
public int checkState() {
return mWifiManager.getWifiState();
}
public void acquireWifiLock() {
mWifiLock.acquire();
}
public void releaseWifiLock() {
if (mWifiLock.isHeld()) {
mWifiLock.acquire();
}
}
public void createWifiLock() {
mWifiLock = mWifiManager.createWifiLock("test");
}
public List<WifiConfiguration> getConfiguration() {
return mWifiConfigurations;
}
public void connetionConfiguration(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();
}
public List<ScanResult> getWifiList() {
return mWifiList;
}
@SuppressLint("UseValueOf")
public StringBuffer lookUpScan() {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < mWifiList.size(); i++) {
sb.append("Index_" + new Integer(i + 1).toString() + ":");
sb.append((mWifiList.get(i)).toString()).append("\n");
}
return sb;
}
public String getMacAddress() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
}
public String getBSSID() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
}
public int getIpAddress() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
}
public int getNetWordId() {
return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
}
public String getWifiInfo() {
return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
}
public void addNetWork(WifiConfiguration configuration) {
int wcgId = mWifiManager.addNetwork(configuration);
mWifiManager.enableNetwork(wcgId, true);
}
public void disConnectionWifi(int netId) {
mWifiManager.disableNetwork(netId);
mWifiManager.disconnect();
}
/**
* 连接wifi,成功返回true,失败返回false
* 注意:WifiConfiguration 中参数的值比ScanResult中相同的参数多了一对双引号
* @return
*/
public boolean connectToWiFi() {
String wifiSSID = "\"" + wifiName + "\"";
String wifiPassWord = "\"" + wifiPw + "\"";
openWifi() ;
startScan();
WifiConfiguration mWifiConfiguration = null;
if (mWifiConfigurations != null) {
for (int i = 0; i < mWifiConfigurations.size(); i++) {
mWifiConfiguration = mWifiConfigurations.get(i);
if (mWifiConfiguration.SSID.equals(wifiSSID)) {
return mWifiManager.enableNetwork(
mWifiConfiguration.networkId, true);
}
}
}
mWifiConfiguration = new WifiConfiguration();
mWifiConfiguration.SSID = wifiSSID;
mWifiConfiguration.preSharedKey = wifiPassWord;
mWifiConfiguration.status = WifiConfiguration.Status.ENABLED;
mWifiConfiguration.hiddenSSID = false;
mWifiManager.addNetwork(mWifiConfiguration);
return mWifiManager.enableNetwork(mWifiConfiguration.networkId, true);
}
}