在Android上开始使用ZXing

3
我正在尝试将ZXing添加到我的项目中(添加一个按钮,按下后调用扫描器)。我找到了这个链接:http://groups.google.com/group/android-developers/browse_thread/thread/788eb52a765c28b5和当然是ZXing的主页:http://code.google.com/p/zxing/,但仍然无法确定要包含在项目类路径中以使其正常工作的内容!
目前为止,我将第一个链接中的类复制到我的项目中(进行了一些包名称更改),它可以运行,但在按下按钮并尝试安装条形码扫描器后崩溃。
一些代码:
private void setScanButton(){
    Button scan = (Button) findViewById(R.id.MainPageScanButton);
    scan.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            IntentIntegrator.initiateScan(MyActivity.this);
        }
    });
}

从logcat中得到的错误结果:

06-13 15:26:01.540: ERROR/AndroidRuntime(1423): Uncaught handler: thread main exiting due to uncaught exception
06-13 15:26:01.560: ERROR/AndroidRuntime(1423): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=market://search?q=pname:com.google.zxing.client.android }

有什么想法?


顺便说一句,我正在运行安卓模拟器 v1.6。 - amitlicht
1
我按照 Google Groups 帖子中的指示操作,将其部署到我的三星 Galaxy S 上时,它第一次就成功了。我甚至不必重命名任何东西。在我的项目中,我让它创建了一个新的类路径,“com.google.zxing.integration.andoid”。 - Eugene van der Merwe
试试我的博客,可能会有所帮助 http://mcondev.wordpress.com/2011/06/24/zxing-1-7-for-android-on-eclipse/ - Siddharth
8个回答

7

点击这里获取相关链接。

在需要触发条形码扫描的活动中,包含以下内容:

IntentIntegrator.initiateScan(YourActivity.this); 

并且还要包括:
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
            TextView 
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
};

条码扫描应用程序将处理实际的扫描。如果未安装条码扫描应用程序,则集成器将提示用户安装它。

----------- 来自nEx.Software ---------------


3

首先,由于模拟器上没有应用商店,ZXing将无法自动提示用户从市场下载。您需要在模拟器上手动安装Barcode Scanner APK。

其次,由于模拟器不会模拟相机,Barcode Scanner可能对您没什么用处。最好在设备上测试此功能。


@Sean Owen:抱歉,一个不知道在说什么的人编辑了我的答案。我需要找出在SO上有哪些编辑警报。 - CommonsWare
Erp,是的,我在评论后弄清楚了发生了什么。明白了。 - Sean Owen

1

只需将以下代码添加到您的清单文件中,在application标签内:

 <activity
        android:name="com.google.zxing.client.android.CaptureActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateAlwaysHidden" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.google.zxing.client.android.SCAN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

如果尚未添加以下权限,请在文件顶部添加:
<uses-permission android:name="android.permission.CAMERA" />


0

我在一个选项卡(片段)中使用Zxing,并使用支持库(用于Material Design组件),因此我必须这样调用:

IntentIntegrator integrator = new IntentIntegrator(getActivity()); integrator.forSupportFragment(this).initiateScan();

然后在onActivityResult()中处理。

    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == IntentIntegrator.REQUEST_CODE) {

            String contents = data.getStringExtra("SCAN_RESULT");
            String format = data.getStringExtra("SCAN_RESULT_FORMAT");
            Log.i(TAG, "Barcode Result: " + contents);
            etc...
        }
    }

而在我的 Manifest.xml 文件中

    <activity
        android:name="com.google.zxing.client.android.CaptureActivity"
        android:configChanges="orientation|keyboardHidden"
        android:windowSoftInputMode="stateAlwaysHidden" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.google.zxing.client.android.SCAN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

现在一切都很好地运作了。我只使用intents和startActivityForResult()是不成功的。扫描仪会启动并定位到QR码,但是没有返回结果。

在我的build.grade文件中,我有:

repositories { mavenCentral() maven { url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/" } }

compile 'com.google.zxing:core:3.2.1'
compile 'com.embarkmobile:zxing-android-minimal:2.0.0@aar'
compile 'com.embarkmobile:zxing-android-integration:2.0.0@aar'

0
  1. 打开模拟器的SD卡。
  2. 复制ZXing下载页面上找到的BarcodeScaner链接。
  3. 在模拟器中打开浏览器并指向链接编辑框。
  4. 进入终端并输入以下命令:adb shell input text 'https://code.google.com/p/zxing/downloads/detail?name=BarcodeScanner-4.5.1.apk&can=2&q=' - 链接是在ZXing下载页面上找到的链接。
  5. 链接已复制到浏览器中,您可以下载和安装它。这解决了所描述的问题。

0
如果您第一次使用zxing,我推荐使用这个项目*1*,它是zxing的一部分,您只需要导入该项目并运行即可。这个项目旨在让在Android中使用QR码变得更加容易。强烈推荐给初学者。祝好运。最后,感谢Sean Owen;

0

您的模拟器上未安装条形码扫描应用程序,因此出现了此异常。以下链接提供了逐步指南,说明如何在模拟器上安装第三方应用程序:

在模拟器上安装应用程序


0

请检查您的AndroidManifest文件,确保您已正确为新添加的Activity设置了"android:name"属性。如果出现"ActivityNotFoundException"错误,主要原因可能是您使用了不同的包名,而ZXing使用的是"com.google.zxing.client.android"包名。当您加载ZXing的第一个Activity时,请给它绝对类路径而不是相对路径。然后您的错误将消失。


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