implement permission management for android qrcode scanning

This commit is contained in:
turnoffthiscomputer
2024-08-01 17:13:08 +02:00
parent 759c20794c
commit c5f464bf9c

View File

@@ -2,7 +2,10 @@ package com.proofofpassport;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.facebook.react.bridge.ActivityEventListener;
import com.facebook.react.bridge.BaseActivityEventListener;
import com.facebook.react.bridge.Promise;
@@ -10,10 +13,12 @@ import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.blikoon.qrcodescanner.QrCodeActivity;
import android.Manifest;
public class QRCodeScannerModule extends ReactContextBaseJavaModule {
private static final int REQUEST_CODE_QR_SCAN = 101;
private static final int PERMISSION_REQUEST_CAMERA = 1;
private Promise scanPromise;
private final ActivityEventListener activityEventListener = new BaseActivityEventListener() {
@@ -25,7 +30,7 @@ public class QRCodeScannerModule extends ReactContextBaseJavaModule {
String result = data.getStringExtra("com.blikoon.qrcodescanner.got_qr_scan_relult");
scanPromise.resolve(result);
} else {
scanPromise.reject("SCAN_FAILED", "QR Code scanning failed");
scanPromise.reject("SCAN_FAILED", "QR Code scanning failed or was cancelled");
}
scanPromise = null;
}
@@ -53,7 +58,36 @@ public class QRCodeScannerModule extends ReactContextBaseJavaModule {
}
scanPromise = promise;
Intent intent = new Intent(currentActivity, QrCodeActivity.class);
currentActivity.startActivityForResult(intent, REQUEST_CODE_QR_SCAN);
if (ContextCompat.checkSelfPermission(currentActivity, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(currentActivity,
new String[]{Manifest.permission.CAMERA},
PERMISSION_REQUEST_CAMERA);
} else {
startQRScanner(currentActivity);
}
}
private void startQRScanner(Activity activity) {
Intent intent = new Intent(activity, QrCodeActivity.class);
activity.startActivityForResult(intent, REQUEST_CODE_QR_SCAN);
}
// Add this method to handle permission result
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PERMISSION_REQUEST_CAMERA) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Activity currentActivity = getCurrentActivity();
if (currentActivity != null) {
startQRScanner(currentActivity);
}
} else {
if (scanPromise != null) {
scanPromise.reject("PERMISSION_DENIED", "Camera permission was denied");
scanPromise = null;
}
}
}
}
}