将ZXing集成到Android Studio中


93

我将开始解释我已完成的所有步骤,最后是什么问题。

  1. 下载ZXing-2.2 https://code.google.com/p/zxing/downloads/list
  2. 在zxing-2.2中全部提取。
  3. 下载并安装Apache Ant http://www.youtube.com/watch?v=XJmndRfb1TU
  4. 使用Windows命令行(运行-> CMD)导航到提取的目录
  5. 在命令行窗口中-键入“ ant -f core / build.xml”,按Enter键,让Apache正常运行

此时,就像将ZXing库直接集成到我的Android应用程序中一样

但是Wooops,“构建文件:core \ build.xml不存在!构建失败。确定。6. 导入ZXing-缺少core / build.xml

现在是的,我有我的core.jar。

  1. 打开Android Studio,文件->导入项目->在/zxing-2.2/中选择/ android /->从现有资源创建项目->项目名称:andoid->的源文件...全部选中下一步->库(不能不执行任何操作)下一页->模块(已选中android)下一页-> SDK 1.7下一页->完成

打开项目->构建->重建项目

100错误19警告

文件->项目结构->库->添加-> Java->选择我之前创建的core.jar,然后单击确定->库“ core”将添加到所选模块中。(android)在“项目结构”对话框中,单击“确定”->“确定”。

生成->重建项目

15个错误20个警告

所有错误都是错误:需要常量表达式,我在android中的ZXing项目的Switch情况下看到Error 我为if else更改了所有开关

0错误20警告

好的,现在继续:

文件->新项目-> zxing_demo下一个->下一个->空白活动下一个->完成

在新项目中->文件->导入模块->搜索并选择/ android / OK->从现有源创建模块下一步->下一步->下一步->下一步->完成

现在,我可以在浏览器中看到/ android / / zging_demoProject /和外部库

现在我更改我的代码tu扫描QR

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.zxing_demo"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="7"
    android:targetSdkVersion="16" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature
    android:name="android.hardware.camera.autofocus"
    android:required="false" />
<uses-feature
    android:name="android.hardware.touchscreen"
    android:required="false" />
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.zxing_demo.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:clearTaskOnLaunch="true"
        android:stateNotNeeded="true"
        android:configChanges="orientation|keyboardHidden"
        android:name="com.google.zxing.client.android.CaptureActivity"
        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.DEFAULT" />
        </intent-filter>
        <intent-filter >
            <action android:name="com.google.zxing.client.android.SCAN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

MainActivity.java

package com.example.zxing_demo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
    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
        }
    }
}

}

现在测试,运行->调试

和崩溃。

Logcat

08-31 02:58:28.085  20665-20665/com.example.zxing_demo E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.zxing_demo/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
    at android.app.ActivityThread.access$600(ActivityThread.java:127)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4448)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882)
    ... 11 more

我可以在这行的AndroidManifest.xml中看到

android:name="com.google.zxing.client.android.CaptureActivity"

红色的“ CaptureActivity”和错误消息:无法解析符号“ CaptureActivity”

文件->项目结构->模块-> zxing_demo->依赖关系->添加->模块依赖关系-> android OK-> Apply and OK

现在CaptureActivity看起来不错

再次调试

08-31 03:06:58.513  21740-21740/com.example.zxing_demo E/AndroidRuntime: FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.zxing_demo/com.google.zxing.client.android.CaptureActivity}: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
    at android.app.ActivityThread.access$600(ActivityThread.java:127)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4448)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.ClassNotFoundException: com.google.zxing.client.android.CaptureActivity
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882)
    ... 11 more

我想我会使用该应用程序和意图,但是现在我想做这个工作,如果有人现在发生的事情告诉我。


这个问题有很多的意见,以便万一它有助于任何人[这里是我的非常类似的问题] [1] [1]:stackoverflow.com/questions/20334572/...
丹尼尔·威尔逊

Answers:


234

我将ZXING集成到Android应用程序中,并且没有很好的输入来源,我将向您提示对我有用的内容- 因为事实证明这很容易

有一个真正方便的git存储库,可将zxingandroid库项目提供为AAR存档。

您所要做的就是将其添加到build.gradle中

repositories {
    jcenter()
}

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

Gradle尽一切努力来编译代码并使其可在您的应用程序中访问。

要随后启动扫描程序,请使用以下类/方法:在“活动”中:

new IntentIntegrator(this).initiateScan(); // `this` is the current Activity

从片段:

IntentIntegrator.forFragment(this).initiateScan(); // `this` is the current Fragment
// If you're using the support library, use IntentIntegrator.forSupportFragment(this) instead.

有几种自定义选项:

IntentIntegrator integrator = new IntentIntegrator(this);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES);
integrator.setPrompt("Scan a barcode");
integrator.setCameraId(0);  // Use a specific camera of the device
integrator.setBeepEnabled(false);
integrator.setBarcodeImageEnabled(true);
integrator.initiateScan();

他们有一个示例项目,并提供了几个集成示例:

如果您已经访问了链接,您将看到我只是从git README复制并粘贴了代码。如果没有,请去那里获得更多的见解和代码示例。


3
巨大的帮助。我花了整整一天的时间试图从另一个项目中导入Zxing,却一无所获。然后,我找到了此链接,BAM已完成。只需从此链接遵循上述代码示例:github.com/zxing/zxing/wiki/Scanning-Via-Intent
Jack BeNimble 2015年

1
代码有效!我有一个问题,我想要扫描仪人像,并且需要为扫描屏幕添加自定义布局,任何人都可以告诉我如何实现吗?
哈什·特里维迪

2
要更改方向,请创建一个扩展CaptureActivity的新Activity,然后在您的AndroidManifest.xml中指定方向。
ChaturaM 2015年

当尝试在Fragment中使用ContinuousCapture运行我的应用程序时:错误:任务':app:transformClassesWithDexForDebug'的执行失败。> com.android.build.transform.api.TransformException:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:处理'command'C:\ Program Files \ Java \ jdk1.8.0 _60 \ bin \ java.exe”完成,退出值非零2
Konstantin Konopko 2015年

1
@简盘; 是的,它确实!
Langusten Gustel '16

7
buttion.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                new com.google.zxing.integration.android.IntentIntegrator(Fragment.this).initiateScan();
            }
        });

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null) {
            if(result.getContents() == null) {
                Log.d("MainActivity", "Cancelled scan");
                Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
            } else {
                Log.d("MainActivity", "Scanned");
                Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            }
        } else {
            // This is important, otherwise the result will not be passed to the fragment
            super.onActivityResult(requestCode, resultCode, data);
        }
    }



dependencies {
    compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
    compile 'com.google.zxing:core:3.2.1'
    compile 'com.android.support:appcompat-v7:23.1.0'
}

7

任何面临相同问题的人,请遵循以下简单步骤:

使用选项android从下载的zxing-masterzip文件中导入项目,Import project (Eclipse ADT, Gradle, etc.)并在应用级build.gradle文件中添加两行代码,即可开始运行。

太简单了,是的...

dependencies {
        // https://mvnrepository.com/artifact/com.google.zxing/core
        compile group: 'com.google.zxing', name: 'core', version: '3.2.1'
        // https://mvnrepository.com/artifact/com.google.zxing/android-core
        compile group: 'com.google.zxing', name: 'android-core', version: '3.2.0'

    }

你总是可以找到最新版本core,并android core从下面的链接:

https://mvnrepository.com/artifact/com.google.zxing/core/3.2.1 https://mvnrepository.com/artifact/com.google.zxing/android-core/3.2.0

更新(29.05.2019)

添加这些依赖项:

dependencies {
    implementation 'com.google.zxing:core:3.4.0'
    implementation 'com.google.zxing:android-core:3.3.0'
}

Perefct简单的答案:)在进行了许多研发之后,我发现了此链接,并且看起来好像发生了魔术。
拉姆凯什·雅达夫(Ramkesh Yadav)'18年

1
现在最新版本Core和Android Core是依赖项{// mvnrepository.com/artifact/com.google.zxing/core 实施组:'com.google.zxing',名称:'core',版本:'3.3.2'/ / mvnrepository.com/artifact/com.google.zxing/android-core 实施组:'com.google.zxing',名称:'android-core',版本:'3.3.0'}
Ramkesh Yadav

我想将其合并到已经完成的项目中,而不想导入为新项目,那么我该如何实现呢?需要紧急帮助:)
拉姆凯什·亚达夫

谢谢!我还必须导入项目并添加依赖项。
CoolMind

0

从版本4.x开始,默认情况下仅支持Android SDK 24+,并且需要androidx。

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

repositories {
    jcenter()
}

dependencies {
    implementation 'com.journeyapps:zxing-android-embedded:4.1.0'
    implementation 'androidx.appcompat:appcompat:1.0.2'
}

android {
    buildToolsVersion '28.0.3' // Older versions may give compile errors
}

较旧的SDK版本

对于版本低于24的Android SDK,您可以将zxing:core降级为3.3.0或更早版本,以支持Android 14+:

repositories {
    jcenter()
}

dependencies {
    implementation('com.journeyapps:zxing-android-embedded:4.1.0') { transitive = false }
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'com.google.zxing:core:3.3.0'
}

android {
    buildToolsVersion '28.0.3'
}

您还需要在Android清单中执行以下操作:

<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />

来源:https : //github.com/journeyapps/zxing-android-embedded


-1

本教程可帮助我集成到android studio:http : //wahidgazzah.olympe.in/integrating-zxing-in-your-android-app-as-standalone-scanner/ 如果失败,请尝试此工具

只需添加到AndroidManifest.xml

<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="com.google.zxing.client.android.SCAN" />
             <category android:name="android.intent.category.DEFAULT" />
         </intent-filter>
     </activity>

希望有帮助!


14
两个链接都是404
prgmrDev

那没有帮助
Deepakgates

@deepakgates:已过时,可以带一些代码检查吗?
hirigoshy 18/09/15
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.