如何将 ZXing 库集成到 Android Studio 进行条码扫描?
How to integrate ZXing Library to Android Studio for Barcode Scanning?
我一直在网上寻找如何将 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.
上禁用离线工作
- Android Studio 的设置>Gradle>取消选中 'offline work'
您需要将以下内容添加到您的 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.
另外,使用方法请参考我在Whosebug上的回答here
它包含我测试过的方法和简单代码。
从 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
进行简单更改的纵向模式,以及更简单的自定义视图的方法。
我用它来处理:
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 进行条形码或 Qr 扫描的最简单方法。
完整参考: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);
}
}
我一直在网上寻找如何将 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.
上禁用离线工作- Android Studio 的设置>Gradle>取消选中 'offline work'
您需要将以下内容添加到您的 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.
另外,使用方法请参考我在Whosebug上的回答here
它包含我测试过的方法和简单代码。
从 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
进行简单更改的纵向模式,以及更简单的自定义视图的方法。
我用它来处理:
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 进行条形码或 Qr 扫描的最简单方法。
完整参考: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);
}
}