如何将 ZXing 库集成到 Android Studio 进行条码扫描?

Posted

技术标签:

【中文标题】如何将 ZXing 库集成到 Android Studio 进行条码扫描?【英文标题】:How to integrate ZXing Library to Android Studio for Barcode Scanning? 【发布时间】:2015-03-07 05:45:19 【问题描述】:

我一直在互联网上寻找如何将 zxing 库包含到我的项目中,我找到了这个教程:http://blog.dihaw.com/integrating-zxing-in-your-android-app-as-standalone-scanner/

但是当我到达您需要检查 BeepManager 以添加 R 导入的地步时,我的项目中(即使在 MainActivity 上)出现了找不到 R 的各种错误。

我还发现了这个https://github.com/journeyapps/zxing-android-embedded/blob/master/README.md,它似乎更容易,因为它是由 gradle 自动集成的,但是当我同步它时会弹出一个错误,它找不到文件。

任何帮助将不胜感激 :) 我是 Android Studio 的新手。

编辑:

我将第二种方法的设置(带有 gradle 设置的那个)添加到我的 build.gradle 并弹出 4 个错误:

Error:Failed to find: com.embarkmobile:zxing-android-legacy:2.0.0 
Error:Failed to find: com.google.zxing:core:3.0.1 
Error:Failed to find: com.embarkmobile:zxing-android-integration:2.0.0 
Error:Failed to find: com.embarkmobile:zxing-android-minimal:2.0.0

有什么帮助吗?

---答案---

为了解决这个问题,我需要在 Gradle 上禁用 Offline Work。

Android Studio 的设置>Gradle>取消选中“离线工作”

【问题讨论】:

具体的错误信息会很有帮助。您可以使用块引用类型的降价格式(行首的>)将其分开并确保您的问题可读。使用问题底部的edit link 进行更改。 ZXing 不是读取条码的唯一方法。从 2016 年开始,使用Android Barcode API 变得更加容易。 @DanDascalescu 您指向 Android Barcode API 的链接已被 SE 删除。还有其他建议吗? 【参考方案1】:

您需要将以下内容添加到您的 build.gradle 文件中:

repositories 
    mavenCentral()

    maven 
        url "http://dl.bintray.com/journeyapps/maven"
    


dependencies 
    // Supports Android 4.0.3 and later (API level 15)
    compile 'com.journeyapps:zxing-android-embedded:2.0.1@aar'

    // Supports Android 2.1 and later (API level 7), but not optimal for later Android versions.
    // If you only plan on supporting Android 4.0.3 and up, you don't need to include this.
    compile 'com.journeyapps:zxing-android-legacy:2.0.1@aar'

    // Convenience library to launch the scanning and encoding Activities.
    // It automatically picks the best scanning library from the above two, depending on the
    // Android version and what is available.
    compile 'com.journeyapps:zxing-android-integration:2.0.1@aar'

    // Version 3.0.x of zxing core contains some code that is not compatible on Android 2.2 and earlier.
    // This mostly affects encoding, but you should test if you plan to support these versions.
    // Older versions e.g. 2.2 may also work if you need support for older Android versions.
    compile 'com.google.zxing:core:3.0.1'

我的build.gradle 文件是这样的:

apply plugin: 'com.android.application'

android 
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig 
        applicationId "com.myapplication2"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    
    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    


repositories 
    mavenCentral()

    maven 
        url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/"
    


dependencies 
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    // Supports Android 4.0.3 and later (API level 15)
    compile 'com.embarkmobile:zxing-android-minimal:2.0.0@aar'

    // Supports Android 2.1 and later (API level 7), but not optimal for later Android versions.
    // If you only plan on supporting Android 4.0.3 and up, you don't need to include this.
    compile 'com.embarkmobile:zxing-android-legacy:2.0.0@aar'

    // Convenience library to launch the scanning and encoding Activities.
    // It automatically picks the best scanning library from the above two, depending on the
    // Android version and what is available.
    compile 'com.embarkmobile:zxing-android-integration:2.0.0@aar'

    // Version 3.0.x of zxing core contains some code that is not compatible on Android 2.2 and earlier.
    // This mostly affects encoding, but you should test if you plan to support these versions.
    // Older versions e.g. 2.2 may also work if you need support for older Android versions.
    compile 'com.google.zxing:core:3.0.1'

代码是here。

另外,关于如何使用,请参考我在 *** 上的回答here

它包含我测试过的方法和简单代码。

【讨论】:

我将这些设置添加到我的 build.gradle 并弹出 4 个错误:错误:找不到:com.embarkmobile:zxing-android-legacy:2.0.0 错误:找不到:com. google.zxing:core:3.0.1 错误:找不到:com.embarkmobile:zxing-android-integration:2.0.0 错误:找不到:com.embarkmobile:zxing-android-minimal:2.0.0 有什么帮助吗?这与之前发生的错误相同 解决了!我会详细说明一个答案 尝试使用这个库。轻松集成 Xzing。 github.com/journeyapps/zxing-android-embedded @Mauriciosilva 你是怎么解决的 Error:Failed to find: com.embarkmobile:zxing-android-legacy:2.0.0 error? @prgmrDev 我在 AS 设置中启用了 OfflineWork。阅读我编辑的问题部分,我写了如何禁用它:)【参考方案2】:

从 zxing-android-embedded 版本 3 开始,您只需将这些添加到您的 build.gradle 文件中:

repositories 
    jcenter()


dependencies 
    compile 'com.journeyapps:zxing-android-embedded:3.0.2@aar'
    compile 'com.google.zxing:core:3.2.0'

按照以下步骤操作:https://github.com/journeyapps/zxing-android-embedded/

它现在还支持纵向模式,只需对 IntentIntegrator 进行简单更改,以及更简单的自定义视图方法。

【讨论】:

嗨,兄弟。你在 ZXing Embedded 中使用过 CompoundBarcodeView 吗? 是的。我从 ViewFinder 的可见性作为 INVISIBLE 开始,并在单击按钮时更改为 VISIBLE,这也调用 decodeSingle 进行单次扫描。这样,视图会显示相机看到的内容,但没有取景器的红线和黄色斑块,直到用户真正想要捕捉为止。但是,当然,这正是我的应用所需要的,您的可能需要它始终可见并捕获。 这应该是被接受的答案,我正在为 Eclipse 使用同一个项目。在这里阅读我的答案***.com/questions/4782543/…【参考方案3】:

集成 ZXing 以进行条码或二维码扫描的最简单方法。

完整参考:Scan Barcode ZXing Android

添加依赖

compile 'me.dm7.barcodescanner:zxing:1.9' 

扫描活动

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.zxing.Result;

import me.dm7.barcodescanner.zxing.ZXingScannerView;

public class ScanActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler

    private ZXingScannerView mScannerView;

    @Override
    public void onCreate(Bundle state) 
        super.onCreate(state);
        mScannerView = new ZXingScannerView(this);   // Programmatically initialize the scanner view
        setContentView(mScannerView);                // Set the scanner view as the content view
    

    @Override
    public void onResume() 
        super.onResume();
        mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
        mScannerView.startCamera();          // Start camera on resume
    

    @Override
    public void onPause() 
        super.onPause();
        mScannerView.stopCamera();           // Stop camera on pause
    

    @Override
    public void handleResult(Result rawResult) 
        // Do something with the result here
       // Log.v("tag", rawResult.getText()); // Prints scan results
       // Log.v("tag", rawResult.getBarcodeFormat().toString()); // Prints the scan format (qrcode, pdf417 etc.)

        MainActivity.tvresult.setText(rawResult.getText());
        onBackPressed();

        // If you would like to resume scanning, call this method below:
        //mScannerView.resumeCameraPreview(this);
    

【讨论】:

【参考方案4】:

我可以用这个:

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'

我推荐使用 IntentIntegrator

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

requestCode 与 IntentIntegrator.REQUEST_CODE 一起返回

【讨论】:

以上是关于如何将 ZXing 库集成到 Android Studio 进行条码扫描?的主要内容,如果未能解决你的问题,请参考以下文章

访问 Zxing QR 扫描仪摄像头视图

从画廊android中的图像扫描条形码

android开发 如何实现扫描本地二维码图片

将 Unity3D 与 ZXing 集成

zxing android 集成在某些设备上崩溃,以下类无法实例化:- com.google.zxing.client.android.ViewfinderView

在安卓应用中嵌入 ZXing