@@ -215,6 +215,8 @@ class QRView(messenger: BinaryMessenger, id: Int, private val params: HashMap<St
215215 private fun startScan (arguments : List <Int >? , result : MethodChannel .Result ) {
216216 val allowedBarcodeTypes = mutableListOf<BarcodeFormat >()
217217 try {
218+ checkAndRequestPermission(result)
219+
218220 arguments?.forEach {
219221 allowedBarcodeTypes.add(BarcodeFormat .values()[it])
220222 }
@@ -255,16 +257,22 @@ class QRView(messenger: BinaryMessenger, id: Int, private val params: HashMap<St
255257 }
256258
257259 private fun hasCameraPermission (): Boolean {
258- return Build .VERSION .SDK_INT < Build .VERSION_CODES .M ||
260+ return permissionGranted ||
261+ Build .VERSION .SDK_INT < Build .VERSION_CODES .M ||
259262 Shared .activity?.checkSelfPermission(Manifest .permission.CAMERA ) == PackageManager .PERMISSION_GRANTED
260263 }
261264
262265 private fun checkAndRequestPermission (result : MethodChannel .Result ? ) {
263266 when {
264267 Build .VERSION .SDK_INT >= Build .VERSION_CODES .M -> {
265- Shared .activity?.requestPermissions(
266- arrayOf(Manifest .permission.CAMERA ),
267- Shared .CAMERA_REQUEST_ID )
268+ if (Shared .activity?.checkSelfPermission(Manifest .permission.CAMERA ) == PackageManager .PERMISSION_GRANTED ) {
269+ permissionGranted = true
270+ channel.invokeMethod(" onPermissionSet" , true )
271+ } else {
272+ Shared .activity?.requestPermissions(
273+ arrayOf(Manifest .permission.CAMERA ),
274+ Shared .CAMERA_REQUEST_ID )
275+ }
268276 }
269277 else -> {
270278 result?.error(" cameraPermission" , " Platform Version to low for camera permission check" , null )
0 commit comments