11package com .gnzlt .AndroidVisionQRReader ;
22
3+ import android .Manifest ;
34import android .content .Intent ;
5+ import android .content .pm .PackageManager ;
46import android .media .AudioManager ;
57import android .media .ToneGenerator ;
8+ import android .os .Build ;
69import android .os .Bundle ;
10+ import android .support .v4 .app .ActivityCompat ;
11+ import android .support .v4 .content .ContextCompat ;
712import android .support .v7 .app .AppCompatActivity ;
813import android .util .Log ;
914import android .util .SparseArray ;
15+ import android .widget .Toast ;
1016
1117import com .gnzlt .AndroidVisionQRReader .camera .CameraSourcePreview ;
1218import com .google .android .gms .vision .CameraSource ;
@@ -20,6 +26,7 @@ public class QRActivity extends AppCompatActivity {
2026
2127 private static final String TAG = "QRActivity" ;
2228 public static final String EXTRA_QR_RESULT = "EXTRA_QR_RESULT" ;
29+ private static final int PERMISSIONS_REQUEST = 100 ;
2330
2431 private BarcodeDetector mBarcodeDetector ;
2532 private CameraSource mCameraSource ;
@@ -32,14 +39,41 @@ protected void onCreate(Bundle savedInstanceState) {
3239
3340 mPreview = (CameraSourcePreview ) findViewById (R .id .cameraSourcePreview );
3441
35- setupBarcodeDetector ();
36- setupCameraSource ();
42+ if (isPermissionGranted ()) {
43+ setupBarcodeDetector ();
44+ setupCameraSource ();
45+ } else {
46+ requestPermission ();
47+ }
3748 }
3849
3950 @ Override
4051 protected void onResume () {
4152 super .onResume ();
42- startCameraSource ();
53+ if (isPermissionGranted ())
54+ startCameraSource ();
55+ }
56+
57+ private boolean isPermissionGranted () {
58+ return ContextCompat .checkSelfPermission (this , Manifest .permission .CAMERA ) == PackageManager .PERMISSION_GRANTED ;
59+ }
60+
61+ private void requestPermission () {
62+ ActivityCompat .requestPermissions (this , new String []{Manifest .permission .CAMERA }, PERMISSIONS_REQUEST );
63+ }
64+
65+ @ Override
66+ public void onRequestPermissionsResult (int requestCode , String [] permissions , int [] grantResults ) {
67+ if (requestCode == PERMISSIONS_REQUEST ) {
68+ if (grantResults .length > 0 && grantResults [0 ] == PackageManager .PERMISSION_GRANTED ) {
69+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .HONEYCOMB ) {
70+ recreate ();
71+ }
72+ } else {
73+ Toast .makeText (this , "This application needs Camera permission to read QR codes" , Toast .LENGTH_SHORT ).show ();
74+ finish ();
75+ }
76+ }
4377 }
4478
4579 private void setupBarcodeDetector () {
@@ -50,7 +84,7 @@ private void setupBarcodeDetector() {
5084 mBarcodeDetector .setProcessor (new Detector .Processor <Barcode >() {
5185 @ Override
5286 public void release () {
53-
87+
5488 }
5589
5690 @ Override
@@ -81,6 +115,7 @@ private void setupCameraSource() {
81115 }
82116
83117 private void startCameraSource () {
118+ Log .d (TAG , "Camera Source started" );
84119 if (mCameraSource != null ) {
85120 try {
86121 mPreview .start (mCameraSource );
0 commit comments