CTS测试中testCameraOrientationAlignedWithDevice项
生活随笔
收集整理的這篇文章主要介紹了
CTS测试中testCameraOrientationAlignedWithDevice项
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
此項主要測試的是Camera的方向和屏幕的方向需要一致,即需要長邊對長邊,短邊對短邊,否則即出現Failed。
(1)源碼分析
private CameraManager mCameraManager;private CameraCharacteristics mCharacteristics;private WindowManager mWindowManager;private Display mDisplay;private String[] mAllCameraIds;private void initCamera(){mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);mDisplay = mWindowManager.getDefaultDisplay();try {mAllCameraIds = mCameraManager.getCameraIdList();} catch (CameraAccessException e) {e.printStackTrace();}}private void testCameraOrientationAlignedWithDevice() {DisplayMetrics metrics = new DisplayMetrics();mDisplay.getMetrics(metrics);// For square screen, test is guaranteed to passif (metrics.widthPixels == metrics.heightPixels) {return;}// Handle display rotationint displayRotation = mDisplay.getRotation();Log.e("dxf_display", "displayRotation = " + displayRotation+ ", width = " + metrics.widthPixels + ", height = " + metrics.heightPixels);if (displayRotation == Surface.ROTATION_90 || displayRotation == Surface.ROTATION_270) {int tmp = metrics.widthPixels;metrics.widthPixels = metrics.heightPixels;metrics.heightPixels = tmp;}//(1)判斷屏幕方向boolean isDevicePortrait = metrics.widthPixels < metrics.heightPixels;for (int i = 0; i < mAllCameraIds.length; i++) {try {mCharacteristics = mCameraManager.getCameraCharacteristics(i+"");} catch (CameraAccessException e) {e.printStackTrace();}// Camera sizeSize pixelArraySize = mCharacteristics.get(CameraCharacteristics.SENSOR_INFO_PIXEL_ARRAY_SIZE);// Camera orientationint sensorOrientation = mCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);// For square sensor, test is guaranteed to passif (pixelArraySize.getWidth() == pixelArraySize.getHeight()) {continue;}Log.e("dxf_sensor", "sensorOrientation = " + sensorOrientation+ ", width = " + pixelArraySize.getWidth() + ", height = " + pixelArraySize.getHeight());// Camera size adjusted for device native orientation.Size adjustedSensorSize;if (sensorOrientation == 90 || sensorOrientation == 270) {adjustedSensorSize = new Size(pixelArraySize.getHeight(), pixelArraySize.getWidth());} else {adjustedSensorSize = pixelArraySize;}//(2)判斷Camera Sensor方向boolean isCameraPortrait =adjustedSensorSize.getWidth() < adjustedSensorSize.getHeight();Log.e("dxf_result","isDevicePortrait = " + isDevicePortrait +", isCameraPortrait = " + isCameraPortrait + ",result = " + (isDevicePortrait^isCameraPortrait));//(3)最后斷言判斷assertFalse("Camera " + mAllCameraIds[i] + "'s long dimension must "+ "align with screen's long dimension", isDevicePortrait^isCameraPortrait);}}注解:
isDevicePortrait^isCameraPortrait–表示需要進行按位異或運算,例如:
如上三處Log打印即可知道是否滿足條件,此項是否Pass。
(2)Log打印
2022-04-07 14:48:09.732 9896-9896/com.example.myapplication E/dxf_display: displayRotation = 1, width = 1920, height = 1184 //后攝 2022-04-07 14:48:09.738 9896-9896/com.example.myapplication E/dxf_sensor: sensorOrientation = 90, width = 3264, height = 2448 2022-04-07 14:48:09.739 9896-9896/com.example.myapplication E/dxf_result: isDevicePortrait = true, isCameraPortrait = true,result = false //前攝 2022-04-07 14:48:09.740 9896-9896/com.example.myapplication E/dxf_sensor: sensorOrientation = 270, width = 2592, height = 1944 2022-04-07 14:48:09.740 9896-9896/com.example.myapplication E/dxf_result: isDevicePortrait = true, isCameraPortrait = true,result = false最終結果result = false,滿足條件從而不會觸發斷言,此項即可Pass,如果存在問題,可查看是Display問題,還是Camera Sensor問題。
此項如果出現Failed一般都是橫屏項目可能會出現問題。
(3)規避方案
我們可以嘗試在Display這邊修改一下方向問題即可。
//frameworks/base/core/java/android.view.Display.javapublic int getRotation() {synchronized (mLock) {updateDisplayInfoLocked();return mMayAdjustByFixedRotation? getDisplayAdjustments().getRotation(mDisplayInfo.rotation): mDisplayInfo.rotation;}}總結
以上是生活随笔為你收集整理的CTS测试中testCameraOrientationAlignedWithDevice项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据ETL简介
- 下一篇: day03--java基础编程:面向对象