Skip to content

Commit d548125

Browse files
Merge pull request #5 from tobiasKaminsky/externalPermission
Picture needs external storage access
2 parents b426f46 + d258c55 commit d548125

File tree

1 file changed

+47
-10
lines changed

1 file changed

+47
-10
lines changed

qrcodescanner/src/main/java/com/blikoon/qrcodescanner/QrCodeActivity.java

+47-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.blikoon.qrcodescanner;
22

33

4+
import android.Manifest;
45
import android.app.Activity;
56
import android.content.Context;
67
import android.content.DialogInterface;
@@ -11,11 +12,15 @@
1112
import android.media.AudioManager;
1213
import android.media.MediaPlayer;
1314
import android.net.Uri;
15+
import android.os.Build;
1416
import android.os.Bundle;
1517
import android.os.Handler;
1618
import android.os.Message;
1719
import android.os.Vibrator;
1820
import android.provider.MediaStore;
21+
import android.support.annotation.NonNull;
22+
import android.support.v4.app.ActivityCompat;
23+
import android.support.v4.content.ContextCompat;
1924
import android.text.TextUtils;
2025
import android.util.Log;
2126
import android.view.SurfaceHolder;
@@ -28,14 +33,14 @@
2833
import android.widget.TextView;
2934
import android.widget.Toast;
3035

31-
import com.google.zxing.Result;
3236
import com.blikoon.qrcodescanner.camera.CameraManager;
3337
import com.blikoon.qrcodescanner.decode.CaptureActivityHandler;
3438
import com.blikoon.qrcodescanner.decode.DecodeImageCallback;
3539
import com.blikoon.qrcodescanner.decode.DecodeImageThread;
3640
import com.blikoon.qrcodescanner.decode.DecodeManager;
3741
import com.blikoon.qrcodescanner.decode.InactivityTimer;
3842
import com.blikoon.qrcodescanner.view.QrCodeFinderView;
43+
import com.google.zxing.Result;
3944

4045
import java.io.IOException;
4146
import java.lang.ref.WeakReference;
@@ -49,6 +54,7 @@ public class QrCodeActivity extends Activity implements Callback, OnClickListene
4954
private static final int REQUEST_PICTURE = 1;
5055
public static final int MSG_DECODE_SUCCEED = 1;
5156
public static final int MSG_DECODE_FAIL = 2;
57+
private static final int PERMISSIONS_EXTERNAL_STORAGE = 102;
5258
private CaptureActivityHandler mCaptureActivityHandler;
5359
private boolean mHasSurface;
5460
private boolean mPermissionOk;
@@ -136,6 +142,16 @@ private boolean hasCameraPermission() {
136142
return PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.CAMERA", getPackageName());
137143
}
138144

145+
private boolean hasExternalStoragePermission() {
146+
if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
147+
PackageManager pm = getPackageManager();
148+
return PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_EXTERNAL_STORAGE", getPackageName());
149+
} else {
150+
return true;
151+
}
152+
153+
}
154+
139155
@Override
140156
protected void onResume() {
141157
super.onResume();
@@ -304,16 +320,16 @@ public void onClick(View v) {
304320
turnFlashLightOff();
305321
}
306322

307-
}else if(v.getId() == R.id.qr_code_header_black_pic)
308-
{
309-
if (!hasCameraPermission()) {
310-
mDecodeManager.showPermissionDeniedDialog(this);
311-
} else {
312-
openSystemAlbum();
313-
}
314-
323+
} else if(v.getId() == R.id.qr_code_header_black_pic) {
324+
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
325+
== android.content.pm.PackageManager.PERMISSION_GRANTED) {
326+
openSystemAlbum();
327+
} else {
328+
ActivityCompat.requestPermissions(this, new String[]
329+
{Manifest.permission.READ_EXTERNAL_STORAGE},
330+
PERMISSIONS_EXTERNAL_STORAGE);
331+
}
315332
}
316-
317333
}
318334

319335
private void openSystemAlbum() {
@@ -455,4 +471,25 @@ public void onClick(DialogInterface dialog, int which) {
455471
}
456472

457473
}
474+
475+
@Override
476+
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
477+
@NonNull int[] grantResults) {
478+
switch (requestCode) {
479+
case PERMISSIONS_EXTERNAL_STORAGE: {
480+
// If request is cancelled, result arrays are empty.
481+
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
482+
// permission was granted
483+
openSystemAlbum();
484+
} else {
485+
// permission denied
486+
return;
487+
}
488+
return;
489+
}
490+
491+
default:
492+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
493+
}
494+
}
458495
}

0 commit comments

Comments
 (0)