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/CaptureModule.java |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/android/packages/apps/Camera2/src/com/android/camera/CaptureModule.java b/android/packages/apps/Camera2/src/com/android/camera/CaptureModule.java
index fa4802d..f8b6d1f 100755
--- a/android/packages/apps/Camera2/src/com/android/camera/CaptureModule.java
+++ b/android/packages/apps/Camera2/src/com/android/camera/CaptureModule.java
@@ -23,6 +23,9 @@
 import android.graphics.RectF;
 import android.graphics.SurfaceTexture;
 import android.location.Location;
+import android.hardware.camera2.CameraAccessException;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CameraManager;
 import android.media.MediaActionSound;
 import android.net.Uri;
 import android.os.AsyncTask;
@@ -354,6 +357,7 @@
     public CaptureModule(AppController appController) {
         this(appController, false);
     }
+    private CameraManager mCameraManager;
 
     /** Constructs a new capture module. */
     public CaptureModule(AppController appController, boolean stickyHdr) {
@@ -414,6 +418,7 @@
         mCameraHandler = new Handler(thread.getLooper());
         mActivity = activity;
         mOneCameraOpener = mAppController.getCameraOpener();
+        mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
 
         try {
             mOneCameraManager = OneCameraModule.provideOneCameraManager();
@@ -429,6 +434,29 @@
         Log.d(TAG,"SettingsManager cameraID = " +
                 mSettingsManager.getInteger(mAppController.getModuleScope(),
                 Keys.KEY_CAMERA_ID) + " facing = " + mCameraFacing);
+
+        int cameraId = mSettingsManager.getInteger(mAppController.getModuleScope(),
+                Keys.KEY_CAMERA_ID);
+        try {
+            String[] cameraIds = mCameraManager.getCameraIdList();
+            Log.d(TAG, "cameraIds len = " + cameraIds.length);
+            boolean foundCameraId = false;
+            for (String currentCameraId : cameraIds) {
+                Log.d(TAG,"Enumerate cameraId = " + currentCameraId);
+                if (Integer.parseInt(currentCameraId) == cameraId) {
+                    Log.d(TAG, "find exists currentCameraId matches first camera id");
+                    foundCameraId = true;
+                    break;
+                }
+            }
+            if (!foundCameraId && cameraIds.length > 0) {
+                cameraId = Integer.parseInt(cameraIds[0]);
+                Log.d(TAG,"cameraId sets to first id of cameraIds: " + cameraId);
+            }
+        } catch (CameraAccessException ex) {
+            Log.w(TAG, "Unable to get camera ID", ex);
+        }
+
         mShowErrorAndFinish = !updateCameraCharacteristics();
         if (mShowErrorAndFinish) {
             return;
@@ -1398,6 +1426,30 @@
         boolean useHdr = mHdrPlusEnabled && mCameraFacing == Facing.BACK;
 
         CameraId cameraId = mOneCameraManager.findFirstCameraFacing(mCameraFacing);
+
+        int settingsCameraId = mSettingsManager.getInteger(mAppController.getModuleScope(), Keys.KEY_CAMERA_ID);
+                //check if settingsCameraId exists now
+        try {
+            String[] cameraIds = mCameraManager.getCameraIdList();
+            boolean foundCameraId = false;
+            for (String currentCameraId : cameraIds) {
+                Log.d(TAG,"Enumerate cameraId = " + currentCameraId);
+                if (Integer.parseInt(currentCameraId) == settingsCameraId) {
+                    Log.d(TAG, "find exists currentCameraId matches first camera id");
+                    foundCameraId = true;
+                    if (Integer.parseInt(cameraId.getValue()) != settingsCameraId) {
+                        cameraId = CameraId.from(String.valueOf(settingsCameraId));
+                    }
+                    break;
+                }
+            }
+            if (!foundCameraId && cameraIds.length > 0) {
+                cameraId = CameraId.from(String.valueOf(cameraIds[0]));
+                Log.d(TAG,"cameraId sets to first id of cameraIds: " + cameraId);
+            }
+        } catch (CameraAccessException ex) {
+            Log.w(TAG, "Unable to get camera ID", ex);
+        }
         final String settingScope = SettingsManager.getCameraSettingScope(cameraId.getValue());
 
         OneCameraCaptureSetting captureSetting;

--
Gitblit v1.6.2