二,监听当前测试项是否是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测试项解决方案(二)的更多相关文章

  1. 监听Android CTS测试项解决方案(一)

    前言: 首先这里需要详细叙述一下标题中"监听Android CTS测试项解决方案"的需求.这里的需求是指我们需要精确的监听到当前CTS测试正在测试的测试项. 因为我们知道CTS认证 ...

  2. vue 定义全局函数,监听android返回键事件

    vue 定义全局函数,监听android返回键事件 方法一:main.js 注入(1)在main.js中写入函数Vue.prototype.changeData = function (){ aler ...

  3. Android 关于ListView中按钮监听的优化问题(方法二)

    关于ListView中按钮监听的优化问题(方法一)地址: http://www.cnblogs.com/steffen/p/3951901.html 之前的方法一,虽然能够解决position的传递, ...

  4. 【Android代码片段之八】监听Android屏幕是否锁屏

    实现方法:1)通过BroadcastReceiver接收广播Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF可以判断屏幕状态是否锁屏,但是只有屏幕状态发 ...

  5. 【转】Android CTS 测试

    http://blog.csdn.net/zxm317122667/article/details/8508013 Android-CTS 4.0.3测试基本配置 1. Download CTS CT ...

  6. 从网页监听Android设备的返回键

    最近搞Android项目的时候,遇到一个比较蛋疼的需求,需要从Client App调用系统浏览器打开一个页面,进行杂七杂八的一些交互之后,返回到App.如何打开浏览器和如何返回App这里就不说了,有兴 ...

  7. 服务器重启后Oracle监听服务没有自动启动的解决方案

    最近一直在被这样一个问题烦恼,就是服务器断电重启后,Oracle监听服务没有正常自动启动(监听服务已经设置为自启动). 具体是这样的,监听服务设置为开机自启动,Oracle数据库服务设置为开机延时启动 ...

  8. android CTS测试

    CTS认证是获得Google推出的Android系统中Android Market服务的前提 CTS兼容性测试的主要目的和意义在于使得用户在Android系统的应用过程中,有更好的用户体验,并展现出A ...

  9. ORACLE监听配置及测试实验

    实验一: 修改db_domain和service_name 我们将Db_name和Db_domain两个参数用'.'连接起来,表示一个数据库,并将该数据库的名称称为Global_name即等于serv ...

随机推荐

  1. js中event.target和event.srcElement的区别

    看了很多资料绝对结果就是 firefox 下的 event.target = IE 下的 event.srcElement jquery中的event.target属性的作用是获取到出发事件的元素.j ...

  2. 看懂UML图

    看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...

  3. Java 流笔记

    BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而实现字符.数组和行的高效读取.操作: Reader BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单 ...

  4. 超实用的JavaScript代码段 --倒计时效果

    现今团购网.电商网.门户网等,常使用时间记录重要的时刻,如时间显示.倒计时差.限时抢购等,本文分析不同倒计时效果的计算思路及方法,掌握日期对象Date,获取时间的方法,计算时差的方法,实现不同的倒时计 ...

  5. IDEA配置maven

    步骤:Setting....或Ctrl+Alt+S

  6. SAP客户标准信用额度修改和创建

    好吧,前提要说一下,信贷是到客户的信贷范围级别的. FUNCTION zfm_credit. *"---------------------------------------------- ...

  7. 3.7 嵌入式SQL

    可以放入所有高级语言中去,如C 因为,SQL是过程性语句,需要高级语言的非过程性处理集合的分类处理 一.一般形式 所有的SQL语句都必须加前缀EXEC SQL SQL语句完成结束标志(:或END EX ...

  8. HTML:表格与表单

    一.图片热点:规划出图片上的一个区域,可以做出超链接,直接点击图片区域就可以完成跳转的效果. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

  9. LevelDb简单介绍和原理——本质:类似nedb,插入数据文件不断增长(快照),再通过删除老数据做更新

    转自:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 有时间再好好看下整个文章! 说起LevelDb也许您不清楚,但是如果作 ...

  10. 小记:获取系统时间的long值,格式化成可读时间。

    /** * 返回的字符串形式是形如:2013年10月20日 20:58 * */ public static String formatTimeInMillis(long timeInMillis) ...