在 Android 应用程序中,点击按钮调用条形码扫描器

12

我已下载zxing 1.6并成功地通过它运行了一个独立的条形码扫描器。现在,这个扫描器在另一个项目中(CaptureActivity),而我的应用程序在另一个名为MyProj的项目中,我只想在我的项目中点击按钮时调用另一个项目中的CaptureActivity,我该如何将整个项目导入到我的项目中或者做些什么使其正常工作。


2
有没有一种通用的类似于“条形码扫描”的类型可以调用?这个意图明确指定了zxing应用程序。 - omni
com.google.zxing.client.android.SCAN 是用于扫描的通用 Intent。只是 ZXing 早在 Android 1.0 之前就已经存在,因此它成为了事实上的标准。它不仅仅选择条形码扫描器。 - Sean Owen
1个回答

37
我认为将“复制”条形码扫描器并包含在您的应用程序中可能会使您的项目负担过重。您应该确保使用来自扫描仪的Intent:

从这里开始:http://code.google.com/p/zxing/wiki/ScanningViaIntent

如果您的Android设备上安装了条形码扫描器,只需发送一个Intent即可让它为您扫描并返回结果。例如,您可以连接一个按钮以扫描QR码:

public Button.OnClickListener mScan = new Button.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.setPackage("com.google.zxing.client.android");
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    }
};

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            // Handle successful scan
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
}

要获取更多选项,例如扫描产品条形码或请求Barcode Scanner编码并显示条形码,请参阅此源文件:

http://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/Intents.java

以下是我们的测试应用程序的一些源代码,展示了如何使用它们:

http://code.google.com/p/zxing/source/browse/trunk/androidtest/src/com/google/zxing/client/androidtest/ZXingTestActivity.java

IntentIntegrator

我们还开始创建一些封装上述某些细节的类库。请参见IntentIntegrator,这可能是一种更容易集成的方法。特别是,它将处理尚未安装Barcode Scanner的情况。

http://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java

通过URL

从Barcode Scanner v2.6开始,您还可以从浏览器中的URL启动该应用程序。只需创建一个到http://zxing.appspot.com/scan的超链接,Barcode Scanner将提供启动并处理它。用户还可以选择始终自动打开Barcode Scanner。

注意:此URL不适用于在浏览器中提供实际网页,它只是一个钩子来启动原生应用程序。

已知问题

用户jamesikanos报告了以下“陷阱”:

创建一个具有launchMode“singleInstance”的TabHost活动 创建一个子活动,其中包含“Start scan”按钮(使用IntentIntegrator从此按钮启动zxing) 您的子活动中的onActivityResult将立即返回为“取消” onActivityResult随后永远不会被调用


2
如果您在启动意图时没有设置包名,您将获得您安装的默认二维码阅读器(在我的情况下是QR Druid),或者如果您有多个应用程序,则会出现应用选择对话框。 - Radon8472

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接