Kullanıcının kamera görüntüsünden okunan verileri onaylamasını/iptal etmesini sağlayan gerçek zamanlı bir QR Kod çözücü oluşturmaya çalışıyorum. (Tabii ki, onay veya iptalini göre, bazı kod çalıştırır ...)İletişim kutusu görüntülenirken QR kodu algılamayı askıya al
Ama kötü bir nokta var: Ben kodlu uygulama bile iletişim içinde iken qr kod verilerini okuma tutar ve ben bulamıyorum Bunu engelleme yolu. İşte
benim ana faaliyettir: Burada
public class MainReadActivity extends Activity {
private SurfaceView cameraView;
private TextView barcodeInfo;
private BarcodeDetector barcodeDetector;
private CameraSource cameraSource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_read);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
cameraView = (SurfaceView) findViewById(R.id.camera_view);
cameraView.requestFocus();
barcodeInfo = (TextView) findViewById(R.id.code_info);
barcodeDetector = new BarcodeDetector.Builder(this).setBarcodeFormats(Barcode.QR_CODE).build();
cameraSource = new CameraSource.Builder(this, barcodeDetector).build();
cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
cameraSource.start(cameraView.getHolder());
} catch (IOException ie) {
Log.e("CAMERA SOURCE", ie.getMessage());
}
}
@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> barcodes = detections.getDetectedItems();
if (barcodes.size() != 0) {
barcodeInfo.post(new Runnable() { // Use the post method of the TextView
public void run() {
ConfirmationDialogFragment myDialog = new ConfirmationDialogFragment();
myDialog.show(getFragmentManager(),"");
barcodeInfo.setVisibility(View.VISIBLE);
barcodeInfo.setText(barcodes.valueAt(0).displayValue);
}
});
}
}
});
}
Ve DialogFragment geçerli:
public class ConfirmationDialogFragment extends DialogFragment {
public Dialog ConfirmationDialogFragment(Bundle savedInstanceState){
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View v = inflater.inflate(R.layout.dialog_confirmation,null);
builder.setView(v);
Dialog dialog = builder.create();
return dialog;
}
}
kimse bana yardımcı olabilir misiniz?
İyileri, P.
Teşekkür @ André! cameraSource.start (cameraView.getHolder()) sorunumu çözdü! Teşekkürler, sallanmaya devam et. –
'cameraSource.stop()' işlevinin çağrılmasının BarcodeDetector İşlemcisinin "receiveDetections" yöntemindeki kodun geri kalanını işlemeyi durdurmasına neden olduğunu buldum. – Dagmar
https://stackoverflow.com/a/41024780/1912127 adresine bakın. – Dagmar