1
1
package com .blikoon .qrcodescanner ;
2
2
3
3
4
+ import android .Manifest ;
4
5
import android .app .Activity ;
5
6
import android .content .Context ;
6
7
import android .content .DialogInterface ;
11
12
import android .media .AudioManager ;
12
13
import android .media .MediaPlayer ;
13
14
import android .net .Uri ;
15
+ import android .os .Build ;
14
16
import android .os .Bundle ;
15
17
import android .os .Handler ;
16
18
import android .os .Message ;
17
19
import android .os .Vibrator ;
18
20
import android .provider .MediaStore ;
21
+ import android .support .annotation .NonNull ;
22
+ import android .support .v4 .app .ActivityCompat ;
23
+ import android .support .v4 .content .ContextCompat ;
19
24
import android .text .TextUtils ;
20
25
import android .util .Log ;
21
26
import android .view .SurfaceHolder ;
28
33
import android .widget .TextView ;
29
34
import android .widget .Toast ;
30
35
31
- import com .google .zxing .Result ;
32
36
import com .blikoon .qrcodescanner .camera .CameraManager ;
33
37
import com .blikoon .qrcodescanner .decode .CaptureActivityHandler ;
34
38
import com .blikoon .qrcodescanner .decode .DecodeImageCallback ;
35
39
import com .blikoon .qrcodescanner .decode .DecodeImageThread ;
36
40
import com .blikoon .qrcodescanner .decode .DecodeManager ;
37
41
import com .blikoon .qrcodescanner .decode .InactivityTimer ;
38
42
import com .blikoon .qrcodescanner .view .QrCodeFinderView ;
43
+ import com .google .zxing .Result ;
39
44
40
45
import java .io .IOException ;
41
46
import java .lang .ref .WeakReference ;
@@ -49,6 +54,7 @@ public class QrCodeActivity extends Activity implements Callback, OnClickListene
49
54
private static final int REQUEST_PICTURE = 1 ;
50
55
public static final int MSG_DECODE_SUCCEED = 1 ;
51
56
public static final int MSG_DECODE_FAIL = 2 ;
57
+ private static final int PERMISSIONS_EXTERNAL_STORAGE = 102 ;
52
58
private CaptureActivityHandler mCaptureActivityHandler ;
53
59
private boolean mHasSurface ;
54
60
private boolean mPermissionOk ;
@@ -136,6 +142,16 @@ private boolean hasCameraPermission() {
136
142
return PackageManager .PERMISSION_GRANTED == pm .checkPermission ("android.permission.CAMERA" , getPackageName ());
137
143
}
138
144
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
+
139
155
@ Override
140
156
protected void onResume () {
141
157
super .onResume ();
@@ -304,16 +320,16 @@ public void onClick(View v) {
304
320
turnFlashLightOff ();
305
321
}
306
322
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
+ }
315
332
}
316
-
317
333
}
318
334
319
335
private void openSystemAlbum () {
@@ -455,4 +471,25 @@ public void onClick(DialogInterface dialog, int which) {
455
471
}
456
472
457
473
}
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
+ }
458
495
}
0 commit comments