zoukankan      html  css  js  c++  java
  • 监听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()){
    
            }


  • 相关阅读:
    JS缓存图片实例
    Windows Server 2008上安装Media Player
    [转] BizTalk Server 2010新功能介绍(一):概述
    Microsoft BizTalk ESB Toolkit 2.0
    Asp.NET导出Excel文件乱码解决若干方法
    [PM Tools]软件项目进度跟踪表v3.0
    关于Silverlight中多项目共享DLL文件的讨论
    Silverlight中的ListBox横向显示CheckBox
    设计模式.简单工厂
    Silverlight用户控件转移时产生的“元素已经是另一个元素的子元素”问题
  • 原文地址:https://www.cnblogs.com/bill-technology/p/4130815.html
Copyright © 2011-2022 走看看