一个测试WIFI的activity
2013-09-09 23:33
211 查看
在手机跟平板的生产中,除了工厂模式测试PCBA之外,工程模式也是整机测试中很有必要的。通常的做法就是用拨号键拨入一串操作码,发出一个Intent,测试APK中接收这个intent后,启动调用apk的acitivity就可以了。这里说明测试WIFI的activity的大致实现过程。
(1)在工程的AndroidManifest.xml中加上对WIFI的权限申明,否则不让访问
(2)页面上放入两个textview控件,第一个控件提示WIFI测试过程,以及以List的形式显示搜索到的WIFI scan result结果;第二个控件提示测试结果是PASS或者FAIL。思路就是启动一个WIFI搜索的线程,里面要分别进行获取WIFI服务、使能WIFI、WIFI扫描、获取WIFI信息、异常和失败处理。检测成功的路径是注册了一个WifiReceiver在收到SCAN_RESULTS_***AILABLE_ACTION这个intent时显示扫描结果并结束线程。
需要用到的import类
该activity类的开头要定义若干所需变量
onCreate的主要内容
自定义的WIFI receiver实现
线程退出函数:
WIFI的scan线程
以上就是主要过程。
(1)在工程的AndroidManifest.xml中加上对WIFI的权限申明,否则不让访问
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
(2)页面上放入两个textview控件,第一个控件提示WIFI测试过程,以及以List的形式显示搜索到的WIFI scan result结果;第二个控件提示测试结果是PASS或者FAIL。思路就是启动一个WIFI搜索的线程,里面要分别进行获取WIFI服务、使能WIFI、WIFI扫描、获取WIFI信息、异常和失败处理。检测成功的路径是注册了一个WifiReceiver在收到SCAN_RESULTS_***AILABLE_ACTION这个intent时显示扫描结果并结束线程。
需要用到的import类
import android.app.Activity; import android.widget.TextView; import android.os.Bundle; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Handler; import android.view.View; import android.net.wifi.WifiManager; import android.net.wifi.ScanResult; import android.content.BroadcastReceiver; import android.util.Log; import java.util.List; import android.net.wifi.WifiInfo;
该activity类的开头要定义若干所需变量
private TextView mMainView, mTV; private WifiManager mWifiManager = null; private boolean mWifiEnabled = false; //WIFI是否使能 WifiReceiver mReceiverWifi = null; //自定义WIFI receiver变量 List<ScanResult> mWifiList; //以List回显ScanResult的变量 StringBuilder mSb = new StringBuilder(); //存储WIFI回显的STRING private final int WAIT_TIMEOUT_S = 30; private int mFlag = -1; //WIFI线程运行时的状态标志 static int mCount = 0; private String strEnableWifi = ""; private String strScanningWifi = ""; private String strSuccess = ""; private String strFaild = ""; private String cannotgetwifiservice = ""; private String cannotgetwifistate = ""; private String wifistateunknown = ""; private boolean mTestResult = false; //WIFI测试的结果
onCreate的主要内容
super.onCreate(savedInstanceState); setContentView(R.layout.led); mTV = (TextView)findViewById(R.id.test); mMainView = (TextView)findViewById(R.id.testinfo); mFlag = -1; //WIFI扫描的初始化状态 mCount = 0; strEnableWifi = getString(R.string.WIFI_enable_wifi).toString(); strScanningWifi = getString(R.string.WIFI_scanning_wifi).toString(); strSuccess = getString(R.string.Success).toString(); strFaild = getString(R.string.Fail).toString(); cannotgetwifiservice = getString(R.string.cannotgetwifiservice).toString(); cannotgetwifistate = getString(R.string.cannotgetwifistate).toString(); wifistateunknown = getString(R.string.wifistateunknown).toString(); mReceiverWifi = new WifiReceiver(); //新建一个WifiReceiver变量,并用IntentFilter跟SCAN_RESULTS_***AILABLE_ACTION绑定 registerReceiver(mReceiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_***AILABLE_ACTION)); try{ mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); mSb.append(strEnableWifi + " ... "); mMainView.setText(mSb); mFlag = 1; //获得WIFI系统服务 mHandler.postDelayed(task, 200); }catch(Exception e) { Log.e(TAG, e.toString()); mMainView.setText(strFaild + ":" + cannotgetwifiservice); mFlag = 0; //线程退出标志 mHandler.postDelayed(task, 2000); }
自定义的WIFI receiver实现
class WifiReceiver extends BroadcastReceiver { public void onReceive(Context c, Intent intent) { mHandler.removeCallbacks(task); //搜到结果就结束线程 mWifiList = mWifiManager.getScanResults(); if (mWifiList == null || mWifiList.size() < 1) { String strWifiScanNoHotspot = getString(R.string.WIFI_scan_no_hotspot).toString(); mMainView.setText(strWifiScanNoHotspot); } else { for (int i = 0; i < mWifiList.size(); i++) { mSb.append(new Integer(i + 1).toString() + "."); mSb.append((mWifiList.get(i)).toString()); mSb.append("\n"); //存储一系列搜到的WIFI SSID等详细信息 } for (ScanResult result : mWifiList){ if(result.level >= -80){ mTestResult = true; //信号强度大于-80db,就PASS mTV.setText("PASS"); } } mMainView.setText(mSb); //显示ScanResult等消息WIFI INFO } } }
线程退出函数:
private void destroy(int res) { mHandler.removeCallbacks(task); if(mReceiverWifi != null){ unregisterReceiver(mReceiverWifi); //注销掉WifiReceiver mReceiverWifi = null; } Intent mIntent = new Intent(); setResult(res, mIntent); finish(); }
WIFI的scan线程
private Handler mHandler = new Handler(); private Runnable task = new Runnable() { public void run() { Log.e(TAG, "run"); int wifiState; switch(mFlag){ case 0: //EXIT destroy(-1); break; case 1://enable wifi try{ wifiState = mWifiManager.getWifiState(); }catch(Exception e) { Log.e(TAG, e.toString()); mMainView.setText(strFaild + ":" + cannotgetwifistate); mFlag = 0; mHandler.postDelayed(task, 2000); break; } Log.w(TAG, "getWifiState wifiState=" + wifiState); if (wifiState == WifiManager.WIFI_STATE_ENABLED) { Log.d(TAG, "WIFI is already enabled"); mWifiEnabled = true; //WIFI使能OK mFlag = 3;//start scan mHandler.postDelayed(task, 200); } else if(wifiState == WifiManager.WIFI_STATE_DISABLED || wifiState == WifiManager.WIFI_STATE_ENABLING) { Log.d(TAG, "Turning wifi on..."); if (wifiState == WifiManager.WIFI_STATE_DISABLED){ try{ mWifiManager.setWifiEnabled(true); //使能WIFI }catch(Exception e) { Log.e(TAG, e.toString()); mMainView.setText(strEnableWifi + " ... " + strFaild + "\n"); mFlag = 0; mHandler.postDelayed(task, 2000); break; } mFlag = 2;//start scan mHandler.postDelayed(task, 1000); } } else { Log.d(TAG, "WIFI Service is unreachable"); mFlag = 2;//start scan mHandler.postDelayed(task, 1000); } break; case 2://get wifi state for 30 times mCount ++; if(mCount < WAIT_TIMEOUT_S){ try{ wifiState = mWifiManager.getWifiState(); }catch(Exception e){ Log.e(TAG, e.toString()); mMainView.setText(strFaild + ":" + cannotgetwifistate); mFlag = 0; mHandler.postDelayed(task, 2000); break; } if(wifiState == WifiManager.WIFI_STATE_ENABLED) { Log.w(TAG, "Turning wifi on Success."); mWifiEnabled = true; mFlag = 3; mHandler.postDelayed(task, 200); } else if (wifiState == WifiManager.WIFI_STATE_UNKNOWN) { Log.w(TAG, "Turning wifi on failed."); mMainView.setText(strEnableWifi + " ... " + (WAIT_TIMEOUT_S -mCount) ); mFlag = 2; mHandler.postDelayed(task, 1000); } }else{ mSb.append(strFaild + "\n"); mMainView.setText(mSb); mFlag = 0;//exit mHandler.postDelayed(task, 2000); } break; case 3://start scan if (mWifiEnabled == true) { mSb.append(strSuccess + "\n\n"); mSb.append(strScanningWifi + " ... \n"); mMainView.setText(mSb); mWifiManager.startScan(); mFlag = 4; mHandler.postDelayed(task, 30 * 1000); //30秒内还没有结果就跳到case4 } else { mSb.append(strFaild + "\n"); mMainView.setText(mSb); mFlag = 0;//exit mHandler.postDelayed(task, 1000); } break; case 4: String strWifiScanTimeout = getString(R.string.WIFI_scan_timeout).toString(); mSb.append(strWifiScanTimeout + "\n\n"); mMainView.setText(mSb); mFlag = 0;//exit mHandler.postDelayed(task, 1000); break; default: break; } } };
以上就是主要过程。
相关文章推荐
- 一个测试WIFI的activity
- 一个测试蓝牙的activity
- 大家都连接路由器在同一个channel吗? wifi硬件测试啥? 天线的作用
- 一个测试触摸屏的activity
- 使用monkey测试时,一个控制WiFi状态的多线程类
- 一个测试LCD的activity
- 一个测试马达和听筒的activity
- [导入]表单提交的一个测试
- 一个简单的GNU assert用法测试程序
- 记一个质量极差的测试工具——请重视手工测试,自动化测试不是银弹
- 用TCL编写了一个生成密码字典的小测试程序,共享一下
- 在Activity中启动一个网络连接遇到android.os.NetworkOnMainThreadException
- 一个很简单却很全面的心理测试:什么对你最重要?
- 如何测试一个网页登陆界面
- 如何成为一个优秀的测试工程师
- 启动一个没有界面的Activity
- Activity生命周期方法的调用顺序工程与测试日志
- 一个高效率SQL储存过程分页,执行效率测试通过500万以上的数据
- WIFI 认证 测试
- 为dialog添加items,并且控制每个activity只能出现一个dialog,不会重复弹出