Kaynağa Gözat

Merge pull request #307 from via-guy/via

Fix getting camera permissions
flutter-beta
Julian Steenbakker 5 yıl önce
committed by GitHub
ebeveyn
işleme
514fce7ec0
Veri tabanında bu imza için bilinen anahtar bulunamadı GPG Anahtar Kimliği: 4AEE18F83AFDEB23
3 değiştirilmiş dosya ile 21 ekleme ve 13 silme
  1. +12
    -4
      android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt
  2. +7
    -3
      ios/Classes/QRView.swift
  3. +2
    -6
      lib/src/qr_code_scanner.dart

+ 12
- 4
android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt Dosyayı Görüntüle

@@ -215,6 +215,8 @@ class QRView(messenger: BinaryMessenger, id: Int, private val params: HashMap<St
private fun startScan(arguments: List<Int>?, result: MethodChannel.Result) {
val allowedBarcodeTypes = mutableListOf<BarcodeFormat>()
try {
checkAndRequestPermission(result)

arguments?.forEach {
allowedBarcodeTypes.add(BarcodeFormat.values()[it])
}
@@ -255,16 +257,22 @@ class QRView(messenger: BinaryMessenger, id: Int, private val params: HashMap<St
}

private fun hasCameraPermission(): Boolean {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M ||
return permissionGranted ||
Build.VERSION.SDK_INT < Build.VERSION_CODES.M ||
Shared.activity?.checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
}

private fun checkAndRequestPermission(result: MethodChannel.Result?) {
when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> {
Shared.activity?.requestPermissions(
arrayOf(Manifest.permission.CAMERA),
Shared.CAMERA_REQUEST_ID)
if (Shared.activity?.checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
permissionGranted = true
channel.invokeMethod("onPermissionSet", true)
} else {
Shared.activity?.requestPermissions(
arrayOf(Manifest.permission.CAMERA),
Shared.CAMERA_REQUEST_ID)
}
}
else -> {
result?.error("cameraPermission", "Platform Version to low for camera permission check", null)


+ 7
- 3
ios/Classes/QRView.swift Dosyayı Görüntüle

@@ -125,7 +125,11 @@ public class QRView:NSObject,FlutterPlatformView {
arguments.forEach { arg in
allowedBarcodeTypes.append( QRCodeTypes[arg]!)
}
MTBBarcodeScanner.requestCameraPermission(success: { permissionGranted in
MTBBarcodeScanner.requestCameraPermission(success: { [weak self] permissionGranted in
guard let self = self else { return }

self.channel.invokeMethod("onPermissionSet", arguments: permissionGranted)

if permissionGranted {
do {
try self.scanner?.startScanning(with: self.cameraFacing, resultBlock: { [weak self] codes in
@@ -169,8 +173,8 @@ public class QRView:NSObject,FlutterPlatformView {

})
} catch {
let error = FlutterError(code: "unknown-error", message: "Unable to start scanning", details: nil)
return result(error)
let scanError = FlutterError(code: "unknown-error", message: "Unable to start scanning", details: error)
result(scanError)
}
} else {
let error = FlutterError(code: "cameraPermission", message: "Permission denied to access the camera", details: nil)


+ 2
- 6
lib/src/qr_code_scanner.dart Dosyayı Görüntüle

@@ -193,13 +193,9 @@ class QRViewController {
break;
case 'onPermissionSet':
if (call.arguments != null && call.arguments is bool) {
if (call.arguments) {
_hasPermissions = true;
} else {
_hasPermissions = false;
}
_hasPermissions = call.arguments;
if (onPermissionSet != null) {
onPermissionSet(this, call.arguments);
onPermissionSet(this, _hasPermissions);
}
}
break;


Yükleniyor…
İptal
Kaydet