編輯:關於Android編程
通過第一種方式介紹的,我們可以得到當前處於活動狀態的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; } Listlist = 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()){ }
模仿支付寶輸入效果,實現很簡單,就是畫個矩形框和圓形,其他的通過組合view來實現所有功能,雖然簡單但是封裝起來,方便以後使用,也分享一下,希望對別人也有點幫助。&nbs
微信指紋支付是目前微信為了進一步提升交易安全所推出的支付驗證手段,但也有很多用戶在使用中會發現很多小問題,比如手上出汗時,就不能順利驗證支付,小編就這個問題
關於四大基本組件的一個總結:1> 4大組件的注冊4大基本組件都需要注冊才能使用,每個Activity、service、Content Provider內容提供者都需
最近無聊在做一個項目,需要用到日歷。日歷並不需要太復雜,只需要能夠簡單的查看就行,所以我選用了java提供的Calendar類,和安卓的gridView組合的形式.先看效