Câu hỏi Tích hợp ZXing trong Android Studio


Tôi sẽ bắt đầu giải thích tất cả các bước tôi đã làm và cuối cùng vấn đề là gì.

  1. Tải xuống ZXing-2.2 https://code.google.com/p/zxing/downloads/list
  2. Extrac tất cả trong zxing-2.2.
  3. Tải xuống và cài đặt Apache Ant http://www.youtube.com/watch?v=XJmndRfb1TU
  4. Với việc sử dụng Windows Commandline (Chạy-> CMD) điều hướng đến thư mục được trích xuất
  5. Trong cửa sổ dòng lệnh - Nhập 'ant -f core / build.xml' nhấn enter và để Apache hoạt động

Tại thời điểm này là như thế Tích hợp thư viện ZXing trực tiếp vào ứng dụng Android của tôi

Nhưng Wooops, "Buildfile: core \ build.xml không tồn tại! Xây dựng không thành công. Ok. 6. Nhập ZXing - thiếu core / build.xml

Bây giờ có, tôi có core.jar của tôi.

  1. Mở Android Studio, File -> Import Project -> Chọn / android / in /zxing-2.2/ -> Tạo dự án từ các nguồn hiện có -> Tên dự án: andoid -> Tệp nguồn cho ... tất cả đã chọn Tiếp theo -> Thư viện (không thể không làm gì cả) Tiếp theo -> Mô-đun (đã chọn android) Tiếp theo -> SDK 1.7 Tiếp theo -> Hoàn tất

Với dự án Open -> Build -> Rebuild project

100 lỗi 19 cảnh báo

File -> project Structure -> Libraries -> Add -> Java -> Chọn core.jar mà tôi tạo trước và OK -> Library 'core' sẽ được thêm vào các module đã chọn. (android) OK -> Và OK trong Hộp thoại Cấu trúc Dự án.

Xây dựng -> Xây dựng lại dự án

15 lỗi 20 cảnh báo

Tất cả các lỗi là lỗi: biểu thức liên tục bắt buộc và tôi hiểu rồi Lỗi trong trường hợp Chuyển đổi dự án ZXing trong Android  Tôi thay đổi tất cả các công tắc nếu elses.

0 lỗi 20 cảnh báo

Ok, bây giờ tiếp tục:

Tệp -> Dự án mới -> zxing_demo Tiếp theo -> Tiếp theo -> Hoạt động trống Tiếp theo -> Hoàn tất

Trong dự án mới -> File -> Import module -> Tìm kiếm và chọn / android / OK -> Tạo module từ các nguồn hiện có Next -> Next -> Next -> Next -> Finish

Bây giờ tôi có thể thấy trong explorer / android / / zging_demoProject / và External Libraries

Bây giờ tôi thay đổi mã của tôi tu quét 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
        }
    }
}

}

Bây giờ thử nghiệm, Run -> Debug

Và CRASH.

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

Tôi có thể thấy trong AndroidManifest.xml trong dòng này

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

"CaptureActivity" màu đỏ và lỗi nói: Không thể phân giải biểu tượng 'CaptureActivity'

File -> Project Structure -> Modules -> zxing_demo -> Dependencies -> Add -> Module dependency -> android OK -> Apply và OK

Bây giờ CaptureActivity có vẻ ổn

Gỡ lỗi lần nữa

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

Tôi nghĩ rằng tôi sẽ sử dụng các ứng dụng và ý định, nhưng bây giờ tôi muốn làm công việc này, nếu ai đó bây giờ những gì xảy ra cho tôi biết xin vui lòng.


76
2017-08-31 01:42


gốc


Câu hỏi này có rất nhiều lượt xem để chỉ trong trường hợp nó giúp bất cứ ai [đây là vấn đề tương tự của tôi] [1] [1]: stackoverflow.com/questions/20334572/… - Daniel Wilson


Các câu trả lời:


Tôi đã tích hợp ZXING vào một ứng dụng Android và không có nguồn tốt cho đầu vào trên tất cả, tôi sẽ cung cấp cho bạn một gợi ý về những gì đã làm việc cho tôi - bởi vì hóa ra rất dễ dàng.

Có một kho git tiện dụng thực sự cung cấp zxing dự án thư viện android dưới dạng kho lưu trữ AAR.

Tất cả những gì bạn phải làm là thêm cái này vào build.gradle của bạn

repositories {
    jcenter()
}

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

và Gradle thực hiện tất cả các phép thuật để biên dịch mã và làm cho nó có thể truy cập được trong ứng dụng của bạn.

Để khởi động Máy quét sau đó, sử dụng lớp / phương thức này: Từ hoạt động:

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

Từ một phân đoạn:

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

Có một số tùy chọn tùy chỉnh:

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();

Họ có một dự án mẫu và đang cung cấp một số ví dụ tích hợp:

Nếu bạn đã truy cập vào liên kết, bạn sẽ thấy rằng tôi chỉ sao chép và dán mã từ git README. Nếu không, hãy đến đó để có thêm thông tin chi tiết và mã ví dụ.


200
2018-05-21 15:52



Giúp đỡ rất nhiều. Tôi đã dành hơn một ngày cố gắng nhập khẩu Zxing từ một dự án khác và đã nhận được hư không. Sau đó, tôi tìm thấy liên kết này và BAM xong rôi. Chỉ cần làm theo ví dụ mã như trên từ liên kết này: github.com/zxing/zxing/wiki/Scanning-Via-Intent. - Jack BeNimble
Công trình mã !! Tôi có một vấn đề, tôi muốn quét chân dung và cần phải thêm bố trí tùy chỉnh cho màn hình quét Có thể bất kỳ một cho tôi biết làm thế nào để đạt được ?? - Harsh Trivedi
Để thay đổi hướng, hãy tạo một Hoạt động mới mở rộng CaptureActivity và chỉ định hướng trong tệp AndroidManifest.xml của bạn. - ChaturaM
Khi cố gắng chạy ứng dụng của tôi bằng ContinuousCapture trong Fragment: Error: Execution failed for task ': app: transformClassesWithDexForDebug'. > com.android.build.transform.api.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Xử lý 'lệnh' C: \ Program Files \ Java \ jdk1.8.0 _60 \ bin \ java.exe '' đã hoàn thành với giá trị thoát khác 0 - Konstantin Konopko
@Janpan; có nó! - Langusten Gustel


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

4
2018-05-04 06:11





Bất kỳ ai phải đối mặt với cùng một vấn đề, hãy làm theo các bước đơn giản:

Nhập dự án android từ tải xuống zxing-master tệp zip sử dụng tùy chọn Import project (Eclipse ADT, Gradle, etc.) và thêm 2 dòng mã dollowing ở cấp ứng dụng của bạn build.gradle và bạn đã sẵn sàng để chạy.

Rất đơn giản, yahh ...

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'

    }

Bạn luôn có thể tìm thấy phiên bản mới nhất core và android core từ các liên kết dưới đây:

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


2
2017-09-19 17:26



Perefct câu trả lời đơn giản :) Sau nhiều R & D tôi tìm thấy liên kết này, và có vẻ như một phép thuật đã xảy ra. - Ramkesh Yadav
Phiên bản mới nhất Core và Android Core là phụ thuộc {// mvnrepository.com/artifact/com.google.zxing/core         nhóm triển khai: 'com.google.zxing', tên: 'core', phiên bản: '3.3.2' // mvnrepository.com/artifact/com.google.zxing/android-core         nhóm triển khai: 'com.google.zxing', tên: 'android-core', phiên bản: '3.3.0'} - Ramkesh Yadav
tôi muốn hợp nhất này trong dự án đã thực hiện không muốn nhập khẩu như dự án mới, vì vậy làm thế nào tôi có thể đạt được điều này? cần giúp đỡ khẩn cấp :) - Ramkesh Yadav


hướng dẫn này giúp tôi tích hợp với studio android: http://wahidgazzah.olympe.in/integrating-zxing-in-your-android-app-as-standalone-scanner/ nếu xuống thử ĐIỀU NÀY

chỉ cần thêm vào 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>

Hy vọng điều này giúp đỡ!.


0
2017-11-12 19:40



cả hai liên kết đều là 404 - prgmrDev