在Android上开始使用ZXing

时间:2010-06-13 15:56:42

标签: android barcode-scanner zxing

我正在尝试将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 }

想法?

8 个答案:

答案 0 :(得分:7)

转到here获取链接。

在您要触发条形码扫描的活动中包括

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
        }
    }
};

Barcode Scanner应用程序将处理实际扫描。如果 未安装条形码扫描仪应用程序,集成商将提示它们 安装它。

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

答案 1 :(得分:3)

首先,ZXing无法在模拟器上自动提示用户从Market下载,因为模拟器上没有Market。您需要在模拟器上手动安装条形码扫描仪APK。

其次,由于模拟器不能模拟相机,因此条形码扫描器可能对您没有多大帮助。很可能你需要在设备上测试它。

答案 2 :(得分: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" />

答案 3 :(得分:0)

检查您的AndroidManifest是否为新添加的活动正确地提供了“ android:name ”属性。你得到“ ActivityNotFoundException ”主要是因为你可能使用了不同的包名,而ZXing正在使用“ com.google.zxing.client.android ”包名。当您加载ZXing的第一个Activity时,请为其指定 绝对类路径 而不是相对路径。然后你的错误就会消失。

答案 4 :(得分:0)

条形码扫描器应用程序未安装在您提供此异常的模拟器上。下面的链接提供了如何在模拟器上安装第三方应用程序的分步指南:

Install application on emulator

答案 5 :(得分:0)

如果你第一次使用zxing,我推荐这个项目* 1 *,它是zxing的一部分,你需要的只是导入项目并运行它。这个项目是尝试在Android中使用QR代码更容易一些。 强烈推荐bigenner.good运气好。 最后,谢谢Sean Owen;

答案 6 :(得分:0)

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

答案 7 :(得分:0)

我在选项卡(片段)中使用Zxing并使用支持库(对于Material Design组件),所以我不得不这样调用它:

IntentIntegrator integrator = new IntentIntegrator(getActivity()); integrator.forSupportFragment(本).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>

现在一切都很好。我只是使用意图和startActivityForResult()并没有成功。扫描仪将启动并修复QR码但未返回。

在我的build.grade中,我有:

存储库{mavenCentral()     maven {url&#34; https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/&#34; } }

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'