ANDROID Caused by java.lang.SecurityException: validateClientPermissionsLocked:1102: Callers from device user 0 are not currently allowed to connect to camera “1”
Camera permission is granted.
It is runned by a FOREGROUND SERVICE.
Works on most devices, but there are few Android 9, Huawei, Motorola and Xiaomi devices that is not working on.
On this link: https://android.googlesource.com/platform/frameworks/av/+/refs/heads/master/services/camera/libcameraservice/CameraService.cpp
Line 1031 explains: “Only allow clients who are being used by the current foreground device user.”
Does this mean that it cannot be accessed by a foreground service?
Code in Kotlin (crash occurs at manager.openCamera):
try { val pickedCamera = getCamera(manager) ?: return if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ) { return } manager.openCamera(pickedCamera, cameraStateCallback, null) imageReader = ImageReader.newInstance(1920, 1088, ImageFormat.JPEG, 1 /* images buffered */) imageReader.setOnImageAvailableListener(onImageAvailableListener, null) } catch (e: CameraAccessException) { }
Advertisement
Answer
After analyzing more the crash, I saw that 100% of the users with this crash, had their proximity sensor activated (provided by Firebase Crashlytics).
I wrote some code to avoid using the camera when the proximity sensor was on and it fully solved the problem.
I do not know what was the logic behind it, but it worked 🙂