FATAL EXCEPTION: CameraX- Process: es.paytef.paytefmobile, PID: 2747 java.lang.SecurityException: validateClientPermissionsLocked:931: Caller "es.paytef.paytefmobile" (PID 10048, UID 2747) cannot open camera "0" without camera permission at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:733) at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:410) at android.hardware.camera2.CameraManager.openCameraForUid(CameraManager.java:553) at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:514) at androidx.camera.camera2.impl.Camera.openCameraDevice(Camera.java:488) at androidx.camera.camera2.impl.Camera.open(Camera.java:144) at androidx.camera.camera2.impl.Camera.addOnlineUseCase(Camera.java:408) at androidx.camera.camera2.impl.Camera$10.run(Camera.java:395) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.os.HandlerThread.run(HandlerThread.java:65) Caused by: android.os.ServiceSpecificException: validateClientPermissionsLocked:931: Caller "es.paytef.paytefmobile" (PID 10048, UID 2747) cannot open camera "0" without camera permission (code 1) at android.os.Parcel.readException(Parcel.java:2027) at android.os.Parcel.readException(Parcel.java:1959) at android.hardware.ICameraService$Stub$Proxy.connectDevice(ICameraService.java:339) at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:374)
Что касается конфигурации, то следующее:
build.gradle(app)
Я разрабатывал приложение, в котором пытаюсь реализовать приложение камеры с помощью плагина CameraX, и получаю следующую ошибку: [code]FATAL EXCEPTION: CameraX- Process: es.paytef.paytefmobile, PID: 2747 java.lang.SecurityException: validateClientPermissionsLocked:931: Caller "es.paytef.paytefmobile" (PID 10048, UID 2747) cannot open camera "0" without camera permission at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:733) at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:410) at android.hardware.camera2.CameraManager.openCameraForUid(CameraManager.java:553) at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:514) at androidx.camera.camera2.impl.Camera.openCameraDevice(Camera.java:488) at androidx.camera.camera2.impl.Camera.open(Camera.java:144) at androidx.camera.camera2.impl.Camera.addOnlineUseCase(Camera.java:408) at androidx.camera.camera2.impl.Camera$10.run(Camera.java:395) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.os.HandlerThread.run(HandlerThread.java:65) Caused by: android.os.ServiceSpecificException: validateClientPermissionsLocked:931: Caller "es.paytef.paytefmobile" (PID 10048, UID 2747) cannot open camera "0" without camera permission (code 1) at android.os.Parcel.readException(Parcel.java:2027) at android.os.Parcel.readException(Parcel.java:1959) at android.hardware.ICameraService$Stub$Proxy.connectDevice(ICameraService.java:339) at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:374)[/code] Что касается конфигурации, то следующее: build.gradle(app) [code]def camerax_version = "1.0.0-alpha01" implementation "androidx.camera:camera-core:${camerax_version}" implementation "androidx.camera:camera-camera2:${camerax_version}" [/code] Что касается использования в моей деятельности, то это: [code]class CameraActivity : ListenerCompatActivity(), ActivityCompat.OnRequestPermissionsResultCallback{ companion object { const val TAKE_PICTURE = 200 }
private val useCase = Application.useCaseManager.camera private lateinit var ui: ActivityCameraBinding private var lensFacing = CameraX.LensFacing.BACK private var imageCapture: ImageCapture? = null private var flashMode: FlashMode = FlashMode.OFF private val filename = "image.png" private val sd = Environment.getExternalStorageDirectory() private val dest = File(sd, filename)
private var resultSent = false override fun getActivityID(): ActivityID = ActivityID.Camera
// Check and request permissions if (hasNoPermissions()) { checkCameraPermissions(applicationContext) } }
private fun startCameraIntent() { /*************************** Camera Intent Start */ // Standard Intent action that can be sent to have the camera // application capture an image and return it. val request = useCase.getCameraRequest() val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) if (intent.resolveActivity(packageManager) != null) startActivityForResult( intent, TAKE_PICTURE )
/*************************** Camera Intent End */ }
private fun sendResult(result: ApiCameraResponse) { logger.info("Sending result = $result") resultSent = true useCase.setResult(result) }
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode != TAKE_PICTURE) { logger.error("Another request not configured received, request: $requestCode, result: $resultCode") super.onActivityResult(requestCode, resultCode, intent) return }
if (resultCode != Activity.RESULT_OK || data == null) { logger.error("Another result received, request: $requestCode, result: $resultCode") sendCancelResult() return } try { logger.info("Request Code:$requestCode") logger.info("Request Code:$requestCode") /*********** Load Captured Image And Data Start */ //imageFilePath image path which you pass with intent val bitmap = intent.extras?.get("data") as Bitmap logger.info("Camera bitmap: $bitmap") val byteArray = convertBitmapToByteArray(bitmap) ?: throw Exception("NULL camera bitmap captured") logger.info("Camera byteArray: $byteArray") val result = ApiCameraResponse( ApiCameraResponse.Result( success = true, message = applicationContext.getString(R.string.camera_save_succesfully), imageContent = Convert.bytesToBase64(byteArray), imageType = "image/png", ) ) sendResult(result) logger.info("image: $bitmap") /*********** Load Captured Image And Data End */ } catch (ex: Throwable) { logger.error("Error capturing camera image", ex) super.onActivityResult(requestCode, resultCode, intent) return } }
/** * Bind the Camera to the lifecycle */ private fun bindCamera() { CameraX.unbindAll()
// Preview config for the camera val previewConfig = PreviewConfig.Builder() .setLensFacing(lensFacing) .build()
val preview = Preview(previewConfig)
// Image capture config which controls the Flash and Lens val imageCaptureConfig = ImageCaptureConfig.Builder() .setTargetRotation(windowManager.defaultDisplay.rotation) .setLensFacing(lensFacing) .setFlashMode(flashMode) .build()
imageCapture = ImageCapture(imageCaptureConfig)
// Handles the output data of the camera preview.setOnPreviewOutputUpdateListener { previewOutput -> // Displays the camera image in our preview view ui.viewFinder.setSurfaceTexture(previewOutput.surfaceTexture) }
// Bind the camera to the lifecycle CameraX.bindToLifecycle(this as LifecycleOwner, imageCapture, preview) }
/** * Check if the app has all permissions */ private fun hasNoPermissions(): Boolean { return ContextCompat.checkSelfPermission( this, Manifest.permission.READ_EXTERNAL_STORAGE ) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission( this, Manifest.permission.WRITE_EXTERNAL_STORAGE ) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission( this, Manifest.permission.CAMERA ) != PackageManager.PERMISSION_GRANTED }
/** * Request all permissions */ fun checkCameraPermissions(context: Context?) { if (ContextCompat.checkSelfPermission(context!!, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED ) { // Permission is not granted Log.d("checkCameraPermissions", "No Camera Permissions") ActivityCompat.requestPermissions( this, arrayOf(Manifest.permission.CAMERA), 100 ) } }
Я хочу сделать сайт, при заходе на который у пользователя будет включаться веб-камера и обрабатываться кадры с нее. Обработанное изображение должно отобразиться на странице.
Я написал небольшое веб-приложение во flask, но по какой-то причине cap =...
Я реализовал API CameraX для получения кадров камеры с использованием варианта использования ImageAnaанализа во фрагменте. Чтобы закрыть камеру, я использую метод ProcessCameraProvider.unbindAll() во фрагменте onPause. Но это не синхронное закрытие...