liyujie
2025-08-28 786ff4f4ca2374bdd9177f2e24b503d43e7a3b93
android/packages/apps/Camera2/src/com/android/camera/CaptureModule.java
....@@ -23,6 +23,9 @@
2323 import android.graphics.RectF;
2424 import android.graphics.SurfaceTexture;
2525 import android.location.Location;
26
+import android.hardware.camera2.CameraAccessException;
27
+import android.hardware.camera2.CameraCharacteristics;
28
+import android.hardware.camera2.CameraManager;
2629 import android.media.MediaActionSound;
2730 import android.net.Uri;
2831 import android.os.AsyncTask;
....@@ -354,6 +357,7 @@
354357 public CaptureModule(AppController appController) {
355358 this(appController, false);
356359 }
360
+ private CameraManager mCameraManager;
357361
358362 /** Constructs a new capture module. */
359363 public CaptureModule(AppController appController, boolean stickyHdr) {
....@@ -414,6 +418,7 @@
414418 mCameraHandler = new Handler(thread.getLooper());
415419 mActivity = activity;
416420 mOneCameraOpener = mAppController.getCameraOpener();
421
+ mCameraManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
417422
418423 try {
419424 mOneCameraManager = OneCameraModule.provideOneCameraManager();
....@@ -429,6 +434,29 @@
429434 Log.d(TAG,"SettingsManager cameraID = " +
430435 mSettingsManager.getInteger(mAppController.getModuleScope(),
431436 Keys.KEY_CAMERA_ID) + " facing = " + mCameraFacing);
437
+
438
+ int cameraId = mSettingsManager.getInteger(mAppController.getModuleScope(),
439
+ Keys.KEY_CAMERA_ID);
440
+ try {
441
+ String[] cameraIds = mCameraManager.getCameraIdList();
442
+ Log.d(TAG, "cameraIds len = " + cameraIds.length);
443
+ boolean foundCameraId = false;
444
+ for (String currentCameraId : cameraIds) {
445
+ Log.d(TAG,"Enumerate cameraId = " + currentCameraId);
446
+ if (Integer.parseInt(currentCameraId) == cameraId) {
447
+ Log.d(TAG, "find exists currentCameraId matches first camera id");
448
+ foundCameraId = true;
449
+ break;
450
+ }
451
+ }
452
+ if (!foundCameraId && cameraIds.length > 0) {
453
+ cameraId = Integer.parseInt(cameraIds[0]);
454
+ Log.d(TAG,"cameraId sets to first id of cameraIds: " + cameraId);
455
+ }
456
+ } catch (CameraAccessException ex) {
457
+ Log.w(TAG, "Unable to get camera ID", ex);
458
+ }
459
+
432460 mShowErrorAndFinish = !updateCameraCharacteristics();
433461 if (mShowErrorAndFinish) {
434462 return;
....@@ -1398,6 +1426,30 @@
13981426 boolean useHdr = mHdrPlusEnabled && mCameraFacing == Facing.BACK;
13991427
14001428 CameraId cameraId = mOneCameraManager.findFirstCameraFacing(mCameraFacing);
1429
+
1430
+ int settingsCameraId = mSettingsManager.getInteger(mAppController.getModuleScope(), Keys.KEY_CAMERA_ID);
1431
+ //check if settingsCameraId exists now
1432
+ try {
1433
+ String[] cameraIds = mCameraManager.getCameraIdList();
1434
+ boolean foundCameraId = false;
1435
+ for (String currentCameraId : cameraIds) {
1436
+ Log.d(TAG,"Enumerate cameraId = " + currentCameraId);
1437
+ if (Integer.parseInt(currentCameraId) == settingsCameraId) {
1438
+ Log.d(TAG, "find exists currentCameraId matches first camera id");
1439
+ foundCameraId = true;
1440
+ if (Integer.parseInt(cameraId.getValue()) != settingsCameraId) {
1441
+ cameraId = CameraId.from(String.valueOf(settingsCameraId));
1442
+ }
1443
+ break;
1444
+ }
1445
+ }
1446
+ if (!foundCameraId && cameraIds.length > 0) {
1447
+ cameraId = CameraId.from(String.valueOf(cameraIds[0]));
1448
+ Log.d(TAG,"cameraId sets to first id of cameraIds: " + cameraId);
1449
+ }
1450
+ } catch (CameraAccessException ex) {
1451
+ Log.w(TAG, "Unable to get camera ID", ex);
1452
+ }
14011453 final String settingScope = SettingsManager.getCameraSettingScope(cameraId.getValue());
14021454
14031455 OneCameraCaptureSetting captureSetting;