@@ -375,31 +375,35 @@ class Camera2ImageCapture : Fragment() {
375
375
cameraId : String ,
376
376
handler : Handler ? = null,
377
377
): CameraDevice = suspendCancellableCoroutine { cont ->
378
- manager.openCamera(
379
- cameraId,
380
- object : CameraDevice .StateCallback () {
381
- override fun onOpened (device : CameraDevice ) = cont.resume(device)
378
+ try {
379
+ manager.openCamera(
380
+ cameraId,
381
+ object : CameraDevice .StateCallback () {
382
+ override fun onOpened (device : CameraDevice ) = cont.resume(device)
382
383
383
- override fun onDisconnected (device : CameraDevice ) {
384
- Log .w(TAG , " Camera $cameraId has been disconnected" )
385
- }
384
+ override fun onDisconnected (device : CameraDevice ) {
385
+ Log .w(TAG , " Camera $cameraId has been disconnected" )
386
+ }
386
387
387
- override fun onError (device : CameraDevice , error : Int ) {
388
- val msg = when (error) {
389
- ERROR_CAMERA_DEVICE -> " Fatal (device)"
390
- ERROR_CAMERA_DISABLED -> " Device policy"
391
- ERROR_CAMERA_IN_USE -> " Camera in use"
392
- ERROR_CAMERA_SERVICE -> " Fatal (service)"
393
- ERROR_MAX_CAMERAS_IN_USE -> " Maximum cameras in use"
394
- else -> " Unknown"
388
+ override fun onError (device : CameraDevice , error : Int ) {
389
+ val msg = when (error) {
390
+ ERROR_CAMERA_DEVICE -> " Fatal (device)"
391
+ ERROR_CAMERA_DISABLED -> " Device policy"
392
+ ERROR_CAMERA_IN_USE -> " Camera in use"
393
+ ERROR_CAMERA_SERVICE -> " Fatal (service)"
394
+ ERROR_MAX_CAMERAS_IN_USE -> " Maximum cameras in use"
395
+ else -> " Unknown"
396
+ }
397
+ val exc = RuntimeException (" Camera $cameraId error: ($error ) $msg " )
398
+ Log .e(TAG , exc.message, exc)
399
+ if (cont.isActive) cont.resumeWithException(exc)
395
400
}
396
- val exc = RuntimeException (" Camera $cameraId error: ($error ) $msg " )
397
- Log .e(TAG , exc.message, exc)
398
- if (cont.isActive) cont.resumeWithException(exc)
399
- }
400
- },
401
- handler,
402
- )
401
+ },
402
+ handler,
403
+ )
404
+ } catch (e: SecurityException ) {
405
+ requestCameraPermission()
406
+ }
403
407
}
404
408
405
409
/* *
0 commit comments