From d258c55a84a6555d11248b61417e88ac5cc8918e Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Mon, 17 Dec 2018 11:39:04 +0100 Subject: [PATCH] Picture needs external storage access --- .../blikoon/qrcodescanner/QrCodeActivity.java | 57 +++++++++++++++---- .../qrcodescanner/decode/DecodeManager.java | 1 + 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/QrCodeActivity.java b/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/QrCodeActivity.java index a29a496..407e5b8 100644 --- a/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/QrCodeActivity.java +++ b/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/QrCodeActivity.java @@ -1,6 +1,7 @@ package com.blikoon.qrcodescanner; +import android.Manifest; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; @@ -11,11 +12,15 @@ import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.Vibrator; import android.provider.MediaStore; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.util.Log; import android.view.SurfaceHolder; @@ -28,7 +33,6 @@ import android.widget.TextView; import android.widget.Toast; -import com.google.zxing.Result; import com.blikoon.qrcodescanner.camera.CameraManager; import com.blikoon.qrcodescanner.decode.CaptureActivityHandler; import com.blikoon.qrcodescanner.decode.DecodeImageCallback; @@ -36,6 +40,7 @@ import com.blikoon.qrcodescanner.decode.DecodeManager; import com.blikoon.qrcodescanner.decode.InactivityTimer; import com.blikoon.qrcodescanner.view.QrCodeFinderView; +import com.google.zxing.Result; import java.io.IOException; import java.lang.ref.WeakReference; @@ -49,6 +54,7 @@ public class QrCodeActivity extends Activity implements Callback, OnClickListene private static final int REQUEST_PICTURE = 1; public static final int MSG_DECODE_SUCCEED = 1; public static final int MSG_DECODE_FAIL = 2; + private static final int PERMISSIONS_EXTERNAL_STORAGE = 102; private CaptureActivityHandler mCaptureActivityHandler; private boolean mHasSurface; private boolean mPermissionOk; @@ -136,6 +142,16 @@ private boolean hasCameraPermission() { return PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.CAMERA", getPackageName()); } + private boolean hasExternalStoragePermission() { + if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { + PackageManager pm = getPackageManager(); + return PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_EXTERNAL_STORAGE", getPackageName()); + } else { + return true; + } + + } + @Override protected void onResume() { super.onResume(); @@ -304,16 +320,16 @@ public void onClick(View v) { turnFlashLightOff(); } - }else if(v.getId() == R.id.qr_code_header_black_pic) - { - if (!hasCameraPermission()) { - mDecodeManager.showPermissionDeniedDialog(this); - } else { - openSystemAlbum(); - } - + } else if(v.getId() == R.id.qr_code_header_black_pic) { + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) + == android.content.pm.PackageManager.PERMISSION_GRANTED) { + openSystemAlbum(); + } else { + ActivityCompat.requestPermissions(this, new String[] + {Manifest.permission.READ_EXTERNAL_STORAGE}, + PERMISSIONS_EXTERNAL_STORAGE); + } } - } private void openSystemAlbum() { @@ -455,4 +471,25 @@ public void onClick(DialogInterface dialog, int which) { } } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], + @NonNull int[] grantResults) { + switch (requestCode) { + case PERMISSIONS_EXTERNAL_STORAGE: { + // If request is cancelled, result arrays are empty. + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + // permission was granted + openSystemAlbum(); + } else { + // permission denied + return; + } + return; + } + + default: + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + } + } } diff --git a/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/decode/DecodeManager.java b/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/decode/DecodeManager.java index 77af3e3..31661ad 100644 --- a/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/decode/DecodeManager.java +++ b/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/decode/DecodeManager.java @@ -5,6 +5,7 @@ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; +import android.util.Log; import com.blikoon.qrcodescanner.R;