Skip to content

Commit 514fce7

Browse files
Merge pull request #307 from via-guy/via
Fix getting camera permissions
2 parents d1c1173 + 334f85e commit 514fce7

3 files changed

Lines changed: 21 additions & 13 deletions

File tree

android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

ios/Classes/QRView.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,11 @@ public class QRView:NSObject,FlutterPlatformView {
125125
arguments.forEach { arg in
126126
allowedBarcodeTypes.append( QRCodeTypes[arg]!)
127127
}
128-
MTBBarcodeScanner.requestCameraPermission(success: { permissionGranted in
128+
MTBBarcodeScanner.requestCameraPermission(success: { [weak self] permissionGranted in
129+
guard let self = self else { return }
130+
131+
self.channel.invokeMethod("onPermissionSet", arguments: permissionGranted)
132+
129133
if permissionGranted {
130134
do {
131135
try self.scanner?.startScanning(with: self.cameraFacing, resultBlock: { [weak self] codes in
@@ -169,8 +173,8 @@ public class QRView:NSObject,FlutterPlatformView {
169173

170174
})
171175
} catch {
172-
let error = FlutterError(code: "unknown-error", message: "Unable to start scanning", details: nil)
173-
return result(error)
176+
let scanError = FlutterError(code: "unknown-error", message: "Unable to start scanning", details: error)
177+
result(scanError)
174178
}
175179
} else {
176180
let error = FlutterError(code: "cameraPermission", message: "Permission denied to access the camera", details: nil)

lib/src/qr_code_scanner.dart

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,9 @@ class QRViewController {
193193
break;
194194
case 'onPermissionSet':
195195
if (call.arguments != null && call.arguments is bool) {
196-
if (call.arguments) {
197-
_hasPermissions = true;
198-
} else {
199-
_hasPermissions = false;
200-
}
196+
_hasPermissions = call.arguments;
201197
if (onPermissionSet != null) {
202-
onPermissionSet(this, call.arguments);
198+
onPermissionSet(this, _hasPermissions);
203199
}
204200
}
205201
break;

0 commit comments

Comments
 (0)