監聽Android CTS測試項解決方案(二)

來源:互聯網
上載者:User

監聽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 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()){        }


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.