二,监听当前测试项是否是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. Python 练习 11

    #!/usr/bin/python # -*- coding: UTF-8 -*- import math for i in range(10000): #转化为整型值 x = int(math.sq ...

  2. 《javascript高级程序设计》 第23章 离线应用与客户端存储

    23.1 离线检测23.2 应用缓存23.3 数据存储 23.3.1 Cookie 23.3.2 IE 用户数据 23.3.3 Web 存储机制 23.3.4 IndexedDB   23.1 离线检 ...

  3. 初始jQuery

    JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF1.5+, Safari 2.0+, Opera ...

  4. Play Framework介绍:主要概念(转)

    Play Framework是一个Rails风格的Full-stack Java Web框架. MVC模型 Play应用遵循Web架构使用的MVC架构模式. 它将应用分离到不同的层中:表现层(Pres ...

  5. BZOJ4003 [JLOI2015]城池攻占

    这题有两种做法来着... 第一种就是一开始想到的比较不靠谱,不过貌似可以过掉: 看从$1$号节点开始到$p$号节点最大需要的体力,记录单调上升的体力,询问的时候二分跳着走就可以了 不过精度问题还有可能 ...

  6. 使用SMSManager短信管理器发送短信

    import android.os.Bundle;import android.app.Activity;import android.app.PendingIntent;import android ...

  7. 1968: [Ahoi2005]COMMON 约数研究

    #include<cstdio> #include<iostream> #define M 1000008 using namespace std; long long tot ...

  8. poj1274 二分匹配

    今天复习二分匹配,A 了一道模板题. 二分匹配需要理解增广路的寻找.用dfs来更新最大匹配.注意一些点:赋初值:愚蠢地把==写成了= ; 然后match的记值;每个点都要重新走一遍. #include ...

  9. 面试题目-c和c++的区别

    在很大程度上,标准C++是标准C的超集.实际上,所有C程序也是C++程序,然而,两者之间有少量区别.下面简要介绍一下最重要的区别.    1. 在C++中,局部变量可以在一个程序块内在任何地方声明,在 ...

  10. Map学习

    1.Query Operations(查询操作) int size();boolean isEmpty(); boolean containsKey(Object key);boolean conta ...