Android 中 控制 wifi

 

在进行robotium 编写自动化测试用例的时候,有些case 需要控制网络来进行验证,这个时候就需要来回关闭,打开wifi 连接。在网上搜了一下,使用方法比较简单,整理如下:

1、首先需要在app中的 AndroidManifest.xml 文件中申请wifi的访问权限,配置如下:

 

 

 <!--申请操作wifi的权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 

 2、java wifi控制代码如下:

 

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.net.wifi.WifiManager.WifiLock;

public class WifiAdmin{//代码来自网络,原址找不到了……
	private WifiManager mWifiManager;	//定义WifiManager对象

	private WifiInfo mWifiInfo;	//定义WifiInfo对象

	private List<ScanResult> mWifiList;	//扫描出的网络连接列表

	private List<WifiConfiguration> mWifiConfiguration;	//网络连接列表

	WifiLock mWifiLock;	//定义一个WifiLock

	public  WifiAdmin(Context context){
		mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);		//取得WifiManager对象
		mWifiInfo = mWifiManager.getConnectionInfo();		//取得WifiInfo对象
	}
	//打开WIFI
	public void openWifi(){
		if (!mWifiManager.isWifiEnabled()){
			mWifiManager.setWifiEnabled(true);
		}
	}
	//关闭WIFI
	public void closeWifi(){
		if (mWifiManager.isWifiEnabled()){
			mWifiManager.setWifiEnabled(false);	
		}
	}
	//锁定WifiLock,当下载大文件时需要锁定
	public void acquireWifiLock(){
		mWifiLock.acquire();
	}
	
	public void releaseWifiLock(){//解锁WifiLock
		//判断时候锁定
		if (mWifiLock.isHeld()){
			mWifiLock.acquire();
		}
	}
	
	public void creatWifiLock(){//创建一个WifiLock
		mWifiLock = mWifiManager.createWifiLock("Test");
	}

	public List<WifiConfiguration> getConfiguration(){	//得到配置好的网络
		return mWifiConfiguration;
	}
	
	public void connectConfiguration(int index){//指定配置好的网络进行连接
		//索引大于配置好的网络索引返回
		if(index > mWifiConfiguration.size()){
			return;
		}
		//连接配置好的指定ID的网络
		mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true);
	}
	
	public void startScan(){
		mWifiManager.startScan();		//得到扫描结果 
		mWifiList = mWifiManager.getScanResults(); 
		mWifiConfiguration = mWifiManager.getConfiguredNetworks();//得到配置好的网络连接
	}
	
	public List<ScanResult> getWifiList(){//得到网络列表
		return mWifiList;
	}
	
	public StringBuilder lookUpScan(){//查看扫描结果
		StringBuilder stringBuilder = new StringBuilder();
		for (int i = 0; i < mWifiList.size(); i++){
			stringBuilder.append("Index_"+new Integer(i + 1).toString() + ":");
			//将ScanResult信息转换成一个字符串包
			//其中把包括:BSSID、SSID、capabilities、frequency、level
			stringBuilder.append((mWifiList.get(i)).toString());
			stringBuilder.append("\n");
		}
		return stringBuilder;
	}
	
	//得到MAC地址
	public String getMacAddress()	{
		return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
	}
	
	//得到接入点的BSSID
	public String getBSSID(){
		return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
	}
	
	//得到IP地址
	public int getIPAddress(){
		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 void addNetwork(WifiConfiguration wcg){
		int wcgID = mWifiManager.addNetwork(wcg); 
		mWifiManager.enableNetwork(wcgID, true); 
	}
	//断开指定ID的网络
	public void disconnectWifi(int netId){
		mWifiManager.disableNetwork(netId);
		mWifiManager.disconnect();
	}
}
 

3、封装到测试用例中代码如下:

 

import com.jayway.android.robotium.solo.Solo;

public class MapParentTest extends ActivityInstrumentationTestCase2 { 
	protected Solo solo; 
	
	public MapParentTest() {
		super("****", **.class);
	}

	public void setUp() throws Exception {
		super.setUp(); 
	}
	
	public void closeWifi(){
		if(wifiAdmin == null){
			wifiAdmin = new WifiAdmin(getActivity().getBaseContext());
		}
		wifiAdmin.closeWifi();
		solo.sleep(6000);
	}
	
	public void openWifi(){
		if(wifiAdmin == null){
			wifiAdmin = new WifiAdmin(getActivity().getBaseContext());
		}
		wifiAdmin.openWifi();
		solo.sleep(6000);
	}
	
	@Override
	protected void tearDown() throws Exception {
		openWifi();
		super.tearDown();
	}
	
}

  睡眠 6000ms的原因是,在打开wifi 和关闭wifi 的过程中,大概需要6000ms的时间来完成操作。

 

 

4、这个时候运行自动化用例,就可以控制wifi了。可以验证在网络发生变化的时候,用例执行情况。

 

你可能感兴趣的:(android)