【问题标题】:intermittent QR Scan results using ZXing IntentIntegrator使用 ZXing IntentIntegrator 的间歇性 QR 扫描结果
【发布时间】:2014-04-10 22:53:56
【问题描述】:

在询问之前我已尽力找到解决方案,但是,我似乎找不到类似的情况。

我已经为我正在开发的应用程序实现了 QR 扫描仪。我正在使用 zxing 库,特别是使用下面的导入。此外,这些应用程序使用来自 Play 商店的“条形码扫描仪”(我被提示安装)。

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

问题是扫描仪每 3-6 次扫描只能工作 1 次。我要么得到一个空返回,要么没有输出。它总是返回到我的源屏幕,从不产生实际错误。

我使用本教程作为来源:Android SDK: Create a Barcode Reader

这是来自 mainactivity 的相关信息:

    public void onClick(View v){
            //respond to clicks
            if(v.getId()==R.id.scanQRButton){
                //scan
                IntentIntegrator scanIntegrator = new IntentIntegrator(this);
                scanIntegrator.initiateScan();
                formatTxt.setText( "Scan Initiated");
                contentTxt.setText(" Scan Results: " + scanContent);

                if(scanContent != null){

                    String userid,medname,tabstaken,dob;


                    StringTokenizer st = new StringTokenizer(scanContent, ",");
                         // token 0
                         dob = st.nextToken();
                         //token 1
                         medname = st.nextToken();
                         //token 2
                         tabstaken = st.nextToken();
                         //token 3
                         //rxnumber

                    DatabaseHandler db = new DatabaseHandler(getApplicationContext());

                    HashMap<String,String> user = new HashMap<String, String>();
                    user = db.getUserDetails();

                    //Store the userlog by passing to UserLogEntry
                    userid = user.get("uid");
                    //debug.setText("Userid: "+ userid+ " medname: " + medname + " tabs: " +tabstaken);

                    UserLogEntry userlog = new UserLogEntry(getApplicationContext(),userid,medname,tabstaken);
                    userlog.addUserLog();



                }



            }

        }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        //retrieve scan result
        IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);

        if (scanningResult != null) {
            //we have a result
            scanContent = scanningResult.getContents();



        }
        else{
            Toast toast = Toast.makeText(getApplicationContext(), 
                "No scan data received!", Toast.LENGTH_SHORT);
            toast.show();
        }
    }


}

这是我正在使用的库包中的 ZXing 类:

意图结果:

https://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentResult.java?r=1273

IntentIntegrator:

https://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java?spec=svn2260&r=2260

关于如何让它在 %100 的时间内工作的任何想法?

谢谢!

【问题讨论】:

    标签: android zxing qr-code


    【解决方案1】:

    所以我尝试了几种不同的方法让扫描仪与 zxing 一起工作,但没有任何效果。无论我做什么,它都感觉很糟糕。除了集成扫描仪使其不需要第三方应用程序(如条形码扫描仪)这一事实之外,这是一个主要的痛苦。我决定寻找替代方案并找到 ZBar。

    如果有人在使用 zxing 进行 QR 扫描时遇到任何问题,我建议您改用 Zbar。代码本身要简单得多。您可以使用 zbar 页面上给出的示例并将其复制并粘贴到您的项目中而无需更改(或很少更改)。此外,将其集成为全包扫描仪非常简单。

    我在此处包含说明以获得更具包容性的答案。此信息可在教程和 ZBar 页面中找到,但是,将它们包含在我的答案中并没有什么坏处。

    1. 首先在这里下载zip:https://github.com/dm77/ZBarScanner
    2. 然后将“ZBarScannerLibrary”添加为现有的 android 项目。
    3. 对于 ZBarScannerLibrary:右键单击->properties->android 并选中“Is Library”
    4. 选择您的项目(您要添加二维码扫描仪的项目),右键单击->属性->android->添加选择ZBarScannerLibrary。
    5. 现在添加页面上给出的 ZBar 代码:https://github.com/dm77/ZBarScanner(如下所示以提供帮助。
    6. 无需拉扯头发即可享受二维码扫描

    这里是 ZBar 提供的示例的主要活动。不要忘记在 android manifest 中添加适当的行:

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera" />
    

    在应用程序元素中,添加活动声明:

    <activity android:name="com.dm.zbar.android.scanner.ZBarScannerActivity"
            android:screenOrientation="landscape"
            android:label="@string/app_name" />
    

    我使用 String Tokenizer 来分离 QR 结果并将它们分类为特定变量。

        package com.dm.zbar.android.examples;
    
        import android.app.Activity;
        import android.content.Intent;
        import android.content.pm.PackageManager;
        import android.os.Bundle;
        import android.text.TextUtils;
        import android.view.View;
        import android.widget.Toast;
        import com.dm.zbar.android.scanner.ZBarConstants;
        import com.dm.zbar.android.scanner.ZBarScannerActivity;
        import net.sourceforge.zbar.Symbol;
    
        public class MainActivity extends Activity {
    
        private static final int ZBAR_SCANNER_REQUEST = 0;
        private static final int ZBAR_QR_SCANNER_REQUEST = 1;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    
        public void launchScanner(View v) {
            if (isCameraAvailable()) {
                Intent intent = new Intent(this, ZBarScannerActivity.class);
                startActivityForResult(intent, ZBAR_SCANNER_REQUEST);
            } else {
                Toast.makeText(this, "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show();
            }
        }
    
        public void launchQRScanner(View v) {
            if (isCameraAvailable()) {
                Intent intent = new Intent(this, ZBarScannerActivity.class);
                intent.putExtra(ZBarConstants.SCAN_MODES, new int[]{Symbol.QRCODE});
                startActivityForResult(intent, ZBAR_SCANNER_REQUEST);
            } else {
                Toast.makeText(this, "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show();
            }
        }
    
        public boolean isCameraAvailable() {
            PackageManager pm = getPackageManager();
            return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode) {
                case ZBAR_SCANNER_REQUEST:
                case ZBAR_QR_SCANNER_REQUEST:
                    if (resultCode == RESULT_OK) {
                        Toast.makeText(this, "Scan Result = " + data.getStringExtra(ZBarConstants.SCAN_RESULT), Toast.LENGTH_SHORT).show();
                    } else if(resultCode == RESULT_CANCELED && data != null) {
                        String error = data.getStringExtra(ZBarConstants.ERROR_INFO);
                        if(!TextUtils.isEmpty(error)) {
                            Toast.makeText(this, error, Toast.LENGTH_SHORT).show();
                        }
                    }
                    break;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多