package monnethic.mobile.qrcode; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.SparseArray; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.TextView; import android.widget.Toast; import com.example.monnthic.monnethicmobile.R; import com.google.android.gms.vision.CameraSource; import com.google.android.gms.vision.Detector; import com.google.android.gms.vision.barcode.Barcode; import com.google.android.gms.vision.barcode.BarcodeDetector; import monnethic.mobile.transaction.ApprovePayementActivity; public class QrCodeScannerActivity extends AppCompatActivity { SurfaceView surfaceView; private BarcodeDetector barcodeDector; private CameraSource cameraSource; private static final int REQUEST_CAMERA_PERMISSION = 201; private String intentData = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_qr_code_scanner); initViews(); } private void initViews(){ surfaceView = findViewById(R.id.surfaceView); } private void initialiseDetector(){ Toast.makeText(getApplicationContext(), "QR code scanner started", Toast.LENGTH_SHORT).show(); barcodeDector = new BarcodeDetector.Builder(this).setBarcodeFormats(Barcode.ALL_FORMATS).build(); cameraSource = new CameraSource.Builder(this, barcodeDector).setRequestedPreviewSize(1920,1080).setAutoFocusEnabled(true).build(); surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { try{ if(ActivityCompat.checkSelfPermission(QrCodeScannerActivity.this, Manifest.permission.CAMERA)== PackageManager.PERMISSION_GRANTED){ cameraSource.start(surfaceView.getHolder()); }else{ ActivityCompat.requestPermissions(QrCodeScannerActivity.this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION); } }catch (Exception e){ e.getMessage(); } } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { cameraSource.stop(); } }); barcodeDector.setProcessor(new Detector.Processor() { @Override public void release() { Toast.makeText(getApplicationContext(),"Barcode scanner has been stopped",Toast.LENGTH_SHORT).show(); } @Override public void receiveDetections(Detector.Detections detections) { final SparseArray barcodes = detections.getDetectedItems(); if(barcodes.size()!=0){ intentData = barcodes.valueAt(0).displayValue; Intent scannedQrIntent = new Intent(QrCodeScannerActivity.this, ApprovePayementActivity.class); scannedQrIntent.putExtra("valueScanned",intentData); QrCodeScannerActivity.this.startActivity(scannedQrIntent); } } }); } @Override protected void onPause(){ super.onPause(); cameraSource.release(); } @Override protected void onResume(){ super.onResume(); initialiseDetector(); } }