From 786ff4f4ca2374bdd9177f2e24b503d43e7a3b93 Mon Sep 17 00:00:00 2001 From: liyujie <2352380935@qq.com> Date: Thu, 28 Aug 2025 12:04:21 +0000 Subject: [PATCH] [4/4]解决USB摄像头打开相机预览界面绿屏 --- android/packages/apps/Camera2/src/com/android/camera/ButtonManager.java | 89 +++++++++++++++++++++++++++++++++++--------- 1 files changed, 70 insertions(+), 19 deletions(-) diff --git a/android/packages/apps/Camera2/src/com/android/camera/ButtonManager.java b/android/packages/apps/Camera2/src/com/android/camera/ButtonManager.java old mode 100755 new mode 100644 index 4a37e47..5d72131 --- a/android/packages/apps/Camera2/src/com/android/camera/ButtonManager.java +++ b/android/packages/apps/Camera2/src/com/android/camera/ButtonManager.java @@ -33,6 +33,12 @@ import com.android.camera.widget.ModeOptions; import com.android.camera2.R; +import android.util.Log; +import android.hardware.camera2.CameraManager; +import android.hardware.camera2.CameraAccessException; +import android.hardware.camera2.CameraCharacteristics; +import com.android.camera.one.OneCamera.Facing; + /** * A class for generating pre-initialized * {@link #android.widget.ImageButton}s. @@ -51,6 +57,10 @@ public static final int BUTTON_GRID_LINES = 10; public static final int BUTTON_EXPOSURE_COMPENSATION = 11; public static final int BUTTON_COUNTDOWN = 12; + + public static final int ZERO_CAMERA = 0; + public static final int ONE_CAMERA = 1; + public static final int TWO_CAMERAS = 2; /** For two state MultiToggleImageButtons, the off index. */ public static final int OFF = 0; @@ -101,7 +111,8 @@ private final AppController mAppController; - private static final String ANDROID_UVC_PROPERTY = "ro.camera.uvcfacing"; + private CameraManager mCameraManager; + private static String TAG = "ButtonManager"; /** * Get a new global ButtonManager. @@ -114,6 +125,7 @@ mSettingsManager = app.getSettingsManager(); mSettingsManager.addListener(this); + mCameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); } /** @@ -361,27 +373,66 @@ initializeHdrPlusFlashButton(button, cb, preCb, R.array.camera_flashmode_icons); break; case BUTTON_CAMERA: - String uvcProperty = SystemProperties.get(ANDROID_UVC_PROPERTY, ""); - if(uvcProperty.equals("null") || uvcProperty.equals("")){ - initializeCameraButton(button, cb, - preCb, R.array.camera_id_icons); + String[] cameraIds = new String[]{}; + int front_num = 0; + int back_num = 0; + int external_num = 0; + try { + cameraIds = mCameraManager.getCameraIdList(); + for (String cameraId : cameraIds) { + CameraCharacteristics characteristics = mCameraManager + .getCameraCharacteristics(cameraId); + if (characteristics.get(CameraCharacteristics.LENS_FACING) == + CameraCharacteristics.LENS_FACING_FRONT) { + front_num = front_num + 1; + } else if (characteristics.get(CameraCharacteristics.LENS_FACING) == + CameraCharacteristics.LENS_FACING_BACK) { + back_num = back_num + 1; + } else if (characteristics.get(CameraCharacteristics.LENS_FACING) == + CameraCharacteristics.LENS_FACING_EXTERNAL) { + external_num = external_num + 1; + } + } } - else if (uvcProperty.equals("back")) { - initializeCameraButton(button, cb, - preCb, R.array.camera_id_icons_with_front_external); + catch (CameraAccessException ex) { + Log.e(TAG, "Unable to read camera list.", ex); } - else if (uvcProperty.equals("front")) { - initializeCameraButton(button, cb, - preCb, R.array.camera_id_icons_with_back_external); + if (front_num == ONE_CAMERA && back_num == ZERO_CAMERA) { + if (external_num == ONE_CAMERA) { + initializeCameraButton(button, cb, + preCb, R.array.camera_id_icon_front_with_external); + } else if (external_num == TWO_CAMERAS) { + initializeCameraButton(button, cb, + preCb, R.array.camera_id_icon_front_with_double_external); + } + } else if (front_num == ZERO_CAMERA && back_num == ONE_CAMERA) { + if (external_num == ONE_CAMERA) { + initializeCameraButton(button, cb, + preCb, R.array.camera_id_icon_back_with_external); + } else if (external_num == TWO_CAMERAS) { + initializeCameraButton(button, cb, + preCb, R.array.camera_id_icon_back_with_double_external); + } + } else if (front_num == ONE_CAMERA && back_num == ONE_CAMERA) { + if (external_num == ZERO_CAMERA) { + initializeCameraButton(button, cb, + preCb, R.array.camera_id_icons); + } else if (external_num == ONE_CAMERA) { + initializeCameraButton(button, cb, + preCb, R.array.camera_id_icons_with_external); + } else if (external_num == TWO_CAMERAS) { + initializeCameraButton(button, cb, + preCb, R.array.camera_id_icons_with_double_external); + } + } else { + switch (cameraIds.length) { + case TWO_CAMERAS: + initializeCameraButton(button, cb, + preCb, R.array.camera_id_icons_external_double); + break; + } } - else if (uvcProperty.equals("external")) { - initializeCameraButton(button, cb, - preCb, R.array.camera_id_icons_with_external); - } - else if (uvcProperty.equals("external-only")) { - initializeCameraButton(button, cb, - preCb, R.array.camera_id_icons_with_only_external); - } + break; case BUTTON_HDR_PLUS: initializeHdrPlusButton(button, cb, preCb, R.array.pref_camera_hdr_plus_icons); -- Gitblit v1.6.2