监听Android CTS测试项解决方案(二)
二,监听当前测试项是否是Accelerometer Measurement Test测试项
通过第一种方式介绍的,我们可以得到当前处于活动状态的Activity类似监听CTS测试当前的测试项。但是由于是监听Android系统中所有Activity,因此会大大降低系统的性能,因此这里有一种效率更高的方式来精确定位当前CTS正在测试的测试项,而不会对系统造成很大的影响。(当然不能修改CTS源码,我们需要使用Android提供的原生CTS APK进行验证)
那么我们这里以Accelerometer Measurement Test测试为了来进一步分析代码。
第一步:寻找CTS Verifier工具调用Framework或者底层获取数据的函数
(AccelerometerMeasurementTestActivity.java)onRun()-->verifyMeasurements()-->(VerifyMeasurementsOperation.java)execute()-->doWork()-->(SensorManagerTestVerifier.java)mSensor.collectEvents(100)
public TestSensorEvent[] collectEvents(int eventCount, String debugInfo) {
this.registerListener(debugInfo);
TestSensorEvent[] events = this.getEvents(eventCount, debugInfo);
this.unregisterListener();
return events;
}
public void registerListener(String debugInfo) {
boolean result = mSensorManager.registerListener(
mEventListener,
mSensorUnderTest,
mSamplingRateInUs,
mReportLatencyInUs);
String message = SensorCtsHelper.formatAssertionMessage(
"registerListener",
mSensorUnderTest,
debugInfo);
Assert.assertTrue(message, result);
}
从上面的代码中我们可以发现,在进行测试的时候会注册和取消一个监听器,而通过对这个监听器的追踪发现,监听器是在SensroManager中注册的,而SensorManager是一个抽象类,而在系统中实现SensorManager的类只有SystemSensorManager.java,在该类中也只有
protected boolean registerListenerImpl(SensorEventListener listener, Sensor sensor,
int delayUs, Handler handler, int maxBatchReportLatencyUs, int reservedFlags)被重写,因此也就是说所有的CTS 测试都会经过这里,因此如果我们能够在这里得到当前处于活动状态下的应用程序并通过Sensor中的TYPE来判断进行的测试项来精确定位,当前CTS正进行测试的测试项。
具体实现方式:
private boolean isAcclerometerMeasurementTest(){
if(mAppContextImpl == null)
{
return false;
}
final ActivityManager am = (ActivityManager)mAppContextImpl.getSystemService(Context.ACTIVITY_SERVICE);
if(am == null)
{
return false;
}
List<RunningAppProcessInfo> list = am.getRunningAppProcesses();
if ((list!=null) && (list.size() != 0)) {
RunningAppProcessInfo topRunningProcess = list.get(0);
if((topRunningProcess !=null) && (topRunningProcess.processName !=null) && topRunningProcess.processName.equals("com.android.cts.verifier")){
if(isAcclerometerMeasurementFocus() == 1)
{
return true;
}
}
}
return false;
}
if((sensor != null)&&(sensor.getType()==Sensor.TYPE_ACCELEROMETER) && isAcclerometerMeasurementTest()){
}
监听Android CTS测试项解决方案(二)的更多相关文章
- 监听Android CTS测试项解决方案(一)
前言: 首先这里需要详细叙述一下标题中"监听Android CTS测试项解决方案"的需求.这里的需求是指我们需要精确的监听到当前CTS测试正在测试的测试项. 因为我们知道CTS认证 ...
- vue 定义全局函数,监听android返回键事件
vue 定义全局函数,监听android返回键事件 方法一:main.js 注入(1)在main.js中写入函数Vue.prototype.changeData = function (){ aler ...
- Android 关于ListView中按钮监听的优化问题(方法二)
关于ListView中按钮监听的优化问题(方法一)地址: http://www.cnblogs.com/steffen/p/3951901.html 之前的方法一,虽然能够解决position的传递, ...
- 【Android代码片段之八】监听Android屏幕是否锁屏
实现方法:1)通过BroadcastReceiver接收广播Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF可以判断屏幕状态是否锁屏,但是只有屏幕状态发 ...
- 【转】Android CTS 测试
http://blog.csdn.net/zxm317122667/article/details/8508013 Android-CTS 4.0.3测试基本配置 1. Download CTS CT ...
- 从网页监听Android设备的返回键
最近搞Android项目的时候,遇到一个比较蛋疼的需求,需要从Client App调用系统浏览器打开一个页面,进行杂七杂八的一些交互之后,返回到App.如何打开浏览器和如何返回App这里就不说了,有兴 ...
- 服务器重启后Oracle监听服务没有自动启动的解决方案
最近一直在被这样一个问题烦恼,就是服务器断电重启后,Oracle监听服务没有正常自动启动(监听服务已经设置为自启动). 具体是这样的,监听服务设置为开机自启动,Oracle数据库服务设置为开机延时启动 ...
- android CTS测试
CTS认证是获得Google推出的Android系统中Android Market服务的前提 CTS兼容性测试的主要目的和意义在于使得用户在Android系统的应用过程中,有更好的用户体验,并展现出A ...
- ORACLE监听配置及测试实验
实验一: 修改db_domain和service_name 我们将Db_name和Db_domain两个参数用'.'连接起来,表示一个数据库,并将该数据库的名称称为Global_name即等于serv ...
随机推荐
- Runner之记计账项目的典型用户分析
- Windows NT访问权限
#define SECTION_QUERY 0x0001 #define SECTION_MAP_WRITE 0x0002 #define SECTION_MAP_READ 0x0004 #defin ...
- iOS 常见 Crash 及解决方案
一.访问了一个已经被释放的对象 在不使用 ARC 的时候,内存要自己管理,这时重复或过早释放都有可能导致 Crash. 例子 NSObject * aObj = [[NSObject alloc] i ...
- PHP的那些坑
1.urlencode urlencode编码的对象必须是utf-8编码.如果是其它格式的编码就会出现乱码. 2.array_merge 一般来说,array_merge就是把两个或两个以上的数组组合 ...
- 推荐cms
推荐cms : 国外:drupal joomla wordpress 国内:phpcms
- 25款漂亮的 WordPress 杂志主题
WordPress是一个免费和开源博客工具和一个内容管理系统(CMS)基于 PHP 和 MySQL,它运行在一个 Web 托管服务.每个月的 WordPress 主题是由开发人员,其中用户喜欢使用 W ...
- FZU 1911 Construct a Matrix
题目链接:Construct a Matrix 题意:构造一个矩阵,要求矩阵的每行每列的和都不相同.矩阵的边长是前n项斐波那契的和. 思路:由sn = 2*(fn-1)+(fn-2)-1,只要知道第n ...
- Wcf Client 异常和关闭的通用处理方法
在项目中采用wcf通讯,客户端很多地方调用服务,需要统一的处理超时和通讯异常以及关闭连接. 1.调用尝试和异常捕获 首先,项目中添加一个通用类ServiceDelegate.cs public del ...
- 利用dispatch_once创建单例
无论是爱还是恨,你都需要单例.实际上每个iOS或Mac OS应用都至少会有UIApplication或NSApplication. 什么是单例呢?Wikipedia是如此定义的: 在软件工程中,单例 ...
- ZOJ 3645 BiliBili 高斯消元 难度:1
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4835 由题意,有: (x1-x11)^2 + (x2-x12)^2 ... = ...