Я делаю сканер без кода это черный экран вместо камеры - PullRequest
0 голосов
/ 21 октября 2019

Я попытался создать сканер штрих-кода в моем приложении. Но он не показывает камеру, он показывает черный экран на прошлой неделе, он все еще работает. Как я могу решить это. Мой код здесь

public class ScanBarcodeCartActivity extends AppCompatActivity {

private SurfaceView surfaceView;
private CameraSource cameraSource;
private TextView text_code,re_scan;
private Button btn_confirm_cart;
private BarcodeDetector barcodeDetector;

private String id_order;
private String phone;
private String cart,dateid,date;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_scan_barcode_cart);

    surfaceView = findViewById(R.id.camera_preview);
    text_code = findViewById(R.id.text_code);
    btn_confirm_cart = findViewById(R.id.confirm_cart);
    re_scan = findViewById(R.id.re_scan);

    barcodeDetector = new BarcodeDetector.Builder(this)
        .setBarcodeFormats(
            Barcode.QR_CODE
        ).build();

    cameraSource = new CameraSource.Builder(this,barcodeDetector)
        .setRequestedPreviewSize(640,480).setAutoFocusEnabled(true).build();


    surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
            try {
                cameraSource.start(holder);
            }catch (IOException e){
                e.printStackTrace();
            }
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            cameraSource.stop();
        }
    });

    barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
        @Override
        public void release() {

        }

        @Override
        public void receiveDetections(Detector.Detections<Barcode> detections) {
            final SparseArray<Barcode> qrcode = detections.getDetectedItems();

            if (qrcode.size() != 0) {
                text_code.post(new Runnable() {
                    @Override
                    public void run() {
                        text_code.setText(qrcode.valueAt(0).displayValue);
                    }
                });
            }
        }
    });

}}

Я пробовал много методов и до сих пор не могу. Я не знаю, если это из-за камеры или поверхности. И спасибо за совет.

...