Android ZXING代码读取器中的自定义摄像机视图,用于显示检测

Android ZXING代码读取器中的自定义摄像机视图,用于显示检测,android,qr-code,zxing,Android,Qr Code,Zxing,我正在使用ZXING二维码阅读器。它工作得很好。检测代码等,但扫描二维码时不显示任何检测进度(如红线)。这是截图 我的活动是 Java public class ScanCode extends Activity implements OnClickListener { Button btnScan; TextView scanResult; String text; Bitmap bmp; ImageView ivPic; @Override public void onCreate(B

我正在使用ZXING二维码阅读器。它工作得很好。检测代码等,但扫描二维码时不显示任何检测进度(如红线)。这是截图

我的活动是

Java

public class ScanCode extends Activity implements OnClickListener {

Button btnScan;
TextView scanResult;
String text;
Bitmap bmp;
ImageView ivPic;

@Override
public void onCreate(Bundle icicle) {
    // TODO Auto-generated method stub
    super.onCreate(icicle);
    setContentView(R.layout.scan_code);
    initViews();
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if (v.getId() == R.id.btnScanCode) {
        Intent intent = new Intent(
                "com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 1);
    }
}

private void initViews() {
    scanResult = (TextView) findViewById(R.id.scanResult);
    ivPic = (ImageView) findViewById(R.id.capturedImg);
    btnScan = (Button) findViewById(R.id.btnScanCode);
    btnScan.setOnClickListener(this);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1)
        if (resultCode == Activity.RESULT_OK) {
            String contents = data.getStringExtra("SCAN_RESULT");
            String format = data.getStringExtra("SCAN_RESULT_FORMAT");
            Toast.makeText(getApplicationContext(), contents,
                    Toast.LENGTH_SHORT).show();
            scanResult.setText(contents);
        }// if result_ok
}// onActivityResult
}

我知道这个答案有点晚了,但我最近刚在我的应用程序中使用了Zxing条形码/二维码扫描仪,如果有人在实现它时遇到问题,请按照以下步骤操作(使用Android Studio官方IDE for Android)

首先在
app-->build.gradle
文件中添加依赖项

dependencies {
      compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
      compile 'com.google.zxing:core:3.2.1'
}
活动用法:

public class MainActivity extends AppCompatActivity {

    Button btnScan;

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

        btnScan = (Button) findViewById(R.id.btnScan);
        btnScan.setOnClickListener(new View.OnClickListener() {

              @Override
              public void onClick(View v) {

                   scanBarcode();

              }

        });
    }

    private void scanBarcode()
    {
        new IntentIntegrator(this).initiateScan(); 
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null) {
            if(result.getContents() == null) {
                Log.d("MainActivity", "Cancelled scan");
                Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
            } else {
                Log.d("MainActivity", "Scanned");
                Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            }
        } 
    }

}
如果要使用自定义
回调
和条形码视图。Zxing提供此功能,只需制作布局文件即可

<com.journeyapps.barcodescanner.CompoundBarcodeView
        android:id="@+id/barcode_scanner"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </com.journeyapps.barcodescanner.CompoundBarcodeView>

<TextView
            android:id="@+id/tvScanResult"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Scan Results will be shown here"
            android:textColor="@android:color/white"
            android:textStyle="bold"/>

在活动中,请使用以下代码

public class MainActivity extends AppCompatActivity
{

CompoundBarcodeView barcodeView;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        barcodeView = (CompoundBarcodeView) findViewById(R.id.barcode_scanner);
        barcodeView.decodeContinuous(callback);
        barcodeView.setStatusText("");

     }

    @Override
    protected void onResume()
    {
        super.onResume();

        barcodeView.resume();

        isScanned = false;
    }

    @Override
    protected void onPause()
    {
        super.onPause();

        barcodeView.pause();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        return barcodeView.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event);
    }

    private BarcodeCallback callback = new BarcodeCallback()
    {
        @Override
        public void barcodeResult(BarcodeResult result)
        {
            if (result.getText() != null)
            {
                barcodeView.setStatusText(result.getText());

                tvscanResult.setText("Data found: " + result.getText());

            }

            //you can also Add preview of scanned barcode
            //ImageView imageView = (ImageView) findViewById(R.id.barcodePreview);
            //imageView.setImageBitmap(result.getBitmapWithResultPoints(Color.YELLOW));
        }

        @Override
        public void possibleResultPoints(List<ResultPoint> resultPoints)
        {
            System.out.println("Possible Result points = " + resultPoints);
        }
    };
}
public类MainActivity扩展了AppCompatActivity
{
复合条码视图条码视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
条形码视图=(CompoundBarcodeView)findViewById(R.id.barcode\U扫描仪);
barcodeView.decodeContinuous(回调);
barcodeView.setStatusText(“”);
}
@凌驾
受保护的void onResume()
{
super.onResume();
resume();
ISS=假;
}
@凌驾
受保护的void onPause()
{
super.onPause();
barcodeView.pause();
}
@凌驾
公共布尔onKeyDown(int-keyCode,KeyEvent事件)
{
返回barcodeView.onKeyDown(keyCode,event)| super.onKeyDown(keyCode,event);
}
私有BarcodeCallback回调=新的BarcodeCallback()
{
@凌驾
公共无效条形码结果(条形码结果)
{
if(result.getText()!=null)
{
barcodeView.setStatusText(result.getText());
tvscanResult.setText(“找到的数据:+result.getText());
}
//您还可以添加扫描条形码的预览
//ImageView ImageView=(ImageView)findViewById(R.id.barcodePreview);
//setImageBitmap(result.getBitmapWithResultPoints(Color.YELLOW));
}
@凌驾
公共无效可能结果点(列出结果点)
{
System.out.println(“可能的结果点=”+resultPoints);
}
};
}
来源。希望有人能从这个解决方案中得到帮助