package github.nisrulz.mobilevisionapi2readbarcodes;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
import android.util.SparseArray;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
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 java.io.IOException;
public class MobileVisionHelper {
private static BarcodeDetector barcodeDetector;
private static CameraSource cameraSource;
public static void init(final Context context, final SurfaceView cameraView, final CodeListener codeListener) {
barcodeDetector =
new BarcodeDetector.Builder(context)
.setBarcodeFormats(Barcode.QR_CODE)
.build();
cameraSource = new CameraSource
.Builder(context, barcodeDetector)
.setRequestedPreviewSize(800, 800)
.build();
cameraView.getHolder()
.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
startCameraView(context, cameraSource, cameraView);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
startCameraView(context, cameraSource, cameraView);
}
});
barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
@Override
public void release() {
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
final SparseArray<Barcode> barcodes = detections.getDetectedItems();
if (barcodes.size() != 0) {
System.out.println("Value : " + barcodes.valueAt(0).displayValue);
codeListener.onDetected(barcodes.valueAt(0).displayValue);
}
}
});
}
private static void startCameraView(Context context, CameraSource cameraSource, SurfaceView
cameraView) {
try {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED) {
cameraSource.start(cameraView.getHolder());
} else {
System.out.println("Permission not granted!");
}
} catch (IOException ie) {
Log.e("CAMERA SOURCE", ie.getMessage());
}
}
}