调试没什么的,就是被自己挖矿了,代码写的是persist.sys.camera.disabled ,测试的时候用的是 persist.sys.camera.back.disabled 。。。。。
+++ b/frameworks/av/services/camera/libcameraservice/CameraService.cpp
@@ -1207,6 +1207,22 @@ Status CameraService::validateClientPermissionsLocked(const String8& cameraId,
return Status::ok();
}
+ bool CameraService::isCameraDisabled(const android::String8& cameraId) const {
+ // 读取 persist.sys.camera.disabled 的值
+ char value[PROPERTY_VALUE_MAX];
+ property_get("persist.sys.camera.disabled", value, "0");
+ bool disabled = (atoi(value) == 1);
+ // ALOGE("Camera %s ..1223 ...is isCameraDisabled: %d", cameraId.string(), disabled);
+ // 仅当 Camera ID 为 "0"(后摄)时禁用
+ if (disabled && cameraId == "0") {
+ // ALOGE("Camera %s is 1225 disabled by persist.sys.camera.disabled", cameraId.string());
+ return true;
+ }
+ return false;
+}
+
+
+
@@ -1621,6 +1642,14 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
int originalClientPid = 0;
+ // bool isDisabled = isCameraDisabled(cameraId);
+ // ALOGE("Camera %s ..1654 is isCameraDisabled: %d", cameraId.string(), isDisabled);
+ if (isCameraDisabled(cameraId)) {
+ // ALOGE("Camera %s is disabled 1652 by system property", cameraId.string());
+ // 返回设备不可用错误(或自定义错误码)
+ return STATUS_ERROR_FMT(ERROR_DISABLED, "Camera %s is disabled", cameraId.string());
+ }
+
ALOGI("CameraService::connect call (PID %d \"%s\", camera ID %s) for HAL version %s and "
"Camera API version %d", clientPid, clientName8.string(), cameraId.string(),
(halVersion == -1) ? "default" : std::to_string(halVersion).c_str(),
diff --git a/frameworks/av/services/camera/libcameraservice/CameraService.h b/frameworks/av/services/camera/libcameraservice/CameraService.h
@@ -100,6 +100,9 @@ public:
CameraService();
virtual ~CameraService();
+ bool isCameraDisabled(const android::String8& cameraId) const;
+
+