Integrasikan ZXing di Android Studio

93

Saya akan mulai menjelaskan semua langkah yang telah saya lakukan dan pada akhirnya apa masalahnya.

  1. Unduh ZXing-2.2 https://code.google.com/p/zxing/downloads/list
  2. Extrac semua dalam zxing-2.2.
  3. Unduh dan pasang Apache Ant http://www.youtube.com/watch?v=XJmndRfb1TU
  4. Dengan menggunakan Windows Commandline (Run-> CMD), navigasikan ke direktori yang diekstrak
  5. Di jendela baris perintah - Ketik 'ant -f core / build.xml' tekan enter dan biarkan Apache bekerja dengan ajaib

Saat ini seperti Mengintegrasikan perpustakaan ZXing langsung ke aplikasi Android saya

Tapi Wooops, "Buildfile: core \ build.xml tidak ada! Build gagal. Ok. 6. Mengimpor ZXing - core / build.xml tidak ada

Sekarang ya, saya memiliki core.jar saya.

  1. Buka Android Studio, File -> Import Project -> Select / android / in /zxing-2.2/ -> Buat proyek dari sumber yang ada -> Nama proyek: andoid -> File sumber untuk ... semua dicentang Berikutnya -> Perpustakaan (tidak bisa tidak melakukan apa-apa) Berikutnya -> Modul (android diperiksa) Berikutnya -> SDK 1.7 Berikutnya -> Selesai

Dengan Project Open -> Build -> Rebuild project

100 kesalahan 19 peringatan

File -> Project Structure -> Libraries -> Add -> Java -> Pilih core.jar yang saya buat sebelumnya dan OK -> Library 'core' akan ditambahkan ke modul yang dipilih. (android) OK -> Dan OK di Project Structure Dialog.

Build -> Rebuild Project

15 kesalahan 20 peringatan

Semua kesalahan adalah kesalahan: ekspresi konstan diperlukan dan saya melihat Kesalahan dalam kasus Switch proyek ZXing di android Saya mengubah semua sakelar jika lain.

0 kesalahan 20 peringatan

Oke, sekarang lanjutkan:

File -> Proyek baru -> zxing_demo Berikutnya -> Berikutnya -> Aktivitas Kosong Berikutnya -> Selesai

Dalam proyek baru -> File -> Impor modul -> Cari dan pilih / android / OK -> Buat modul dari sumber yang ada Berikutnya -> Berikutnya -> Berikutnya -> Berikutnya -> Selesai

Sekarang saya bisa melihat di explorer / android / / zging_demoProject / dan Library Eksternal

Sekarang saya mengubah kode saya untuk memindai 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
        }
    }
}

}

Sekarang uji, Jalankan -> Debug

Dan 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

Saya bisa melihat di AndroidManifest.xml di baris ini

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

"CaptureActivity" berwarna merah dan kesalahan mengatakan: Tidak dapat menyelesaikan simbol 'CaptureActivity'

File -> Struktur Proyek -> Modul -> zxing_demo -> Ketergantungan -> Tambah -> Ketergantungan modul -> android OK -> Terapkan dan OK

Sekarang CaptureActivity terlihat bagus

Debug lagi

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

Saya pikir saya akan menggunakan aplikasi dan maksud, tetapi sekarang saya ingin melakukan pekerjaan ini, jika seseorang sekarang apa yang terjadi, tolong beri tahu saya.

Perusahaan Victor
sumber
Pertanyaan ini memiliki banyak tampilan jadi untuk berjaga-jaga kalau-kalau itu membantu siapa pun [inilah masalah saya yang sangat mirip] [1] [1]: stackoverflow.com/questions/20334572/…
Daniel Wilson

Jawaban:

236

Saya mengintegrasikan ZXING ke dalam aplikasi Android dan tidak ada sumber yang baik untuk semua masukan, saya akan memberi Anda petunjuk tentang apa yang berhasil untuk saya - karena ternyata sangat mudah .

Ada repositori git yang sangat berguna yang menyediakan zxingproyek perpustakaan android sebagai arsip AAR.

Yang harus Anda lakukan adalah menambahkan ini ke build.gradle Anda

repositories {
    jcenter()
}

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

dan Gradle melakukan semua keajaiban untuk mengompilasi kode dan membuatnya dapat diakses di aplikasi Anda.

Untuk memulai Scanner setelahnya, gunakan kelas / metode ini: Dari Aktivitas:

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

Dari Fragmen:

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

Ada beberapa opsi penyesuaian:

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

Mereka memiliki proyek sampel dan memberikan beberapa contoh integrasi:

Jika Anda sudah mengunjungi tautan, Anda akan melihat bahwa saya baru saja menyalin & menempelkan kode dari git README. Jika tidak, buka sana untuk mendapatkan lebih banyak wawasan dan contoh kode.

Langusten Gustel
sumber
3
Bantuan besar. Saya telah menghabiskan lebih dari satu hari mencoba mengimpor Zxing dari proyek lain dan tidak berhasil. Kemudian saya menemukan tautan ini dan BAM selesai. Ikuti saja contoh kode seperti di atas dari tautan ini: github.com/zxing/zxing/wiki/Scanning-Via-Intent .
Jack BeNimble
1
Kode Bekerja !! Saya punya satu masalah, saya ingin potret pemindai dan perlu menambahkan tata letak khusus untuk layar pemindaian Adakah yang bisa memberi tahu saya cara mencapainya ??
Harsh Trivedi
2
Untuk mengubah orientasi, buat Activity baru yang memperluas CaptureActivity, dan tentukan orientasi di AndroidManifest.xml Anda.
ChaturaM
Saat mencoba menjalankan aplikasi saya menggunakan ContinuousCapture di Fragmen: Kesalahan: Eksekusi gagal untuk tugas ': app: transformClassesWithDexForDebug'. > com.android.build.transform.api.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Proses 'perintah' C: \ Program Files \ Java \ jdk1.8.0 _60 \ bin \ java.exe '' selesai dengan nilai keluar bukan nol 2
Konstantin Konopko
1
@Tokopedia ya itu benar!
Langusten Gustel
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'
}
Hardip
sumber
7

Siapa pun yang menghadapi masalah yang sama, ikuti langkah-langkah sederhana berikut:

Impor proyek androiddari zxing-masterfile zip yang diunduh menggunakan opsi Import project (Eclipse ADT, Gradle, etc.)dan tambahkan 2 baris kode berikut di build.gradlefile level aplikasi Anda dan dan Anda siap untuk menjalankan.

Sederhana sekali, 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'

    }

Anda selalu dapat menemukan versi terbaru coredan android coredari tautan di bawah ini:

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

PEMBARUAN (29.05.2019)

Tambahkan dependensi ini sebagai gantinya:

dependencies {
    implementation 'com.google.zxing:core:3.4.0'
    implementation 'com.google.zxing:android-core:3.3.0'
}
Smeet
sumber
Perefct jawaban sederhana :) Setelah Banyak R&D saya menemukan tautan ini, dan sepertinya keajaiban terjadi.
Ramkesh Yadav
1
sekarang versi terbaru Core dan Android Core adalah dependensi {// mvnrepository.com/artifact/com.google.zxing/core grup implementasi: 'com.google.zxing', nama: 'core', versi: '3.3.2' / / mvnrepository.com/artifact/com.google.zxing/android-core grup implementasi: 'com.google.zxing', nama: 'android-core', versi: '3.3.0'}
Ramkesh Yadav
saya ingin menggabungkan ini dalam proyek yang sudah dibuat tidak ingin mengimpor sebagai proyek baru, jadi bagaimana saya bisa mencapai ini? bantuan mendesak diperlukan :)
Ramkesh Yadav
Terima kasih! Saya juga harus mengimpor proyek dan menambahkan dependensi.
CoolMind
0

Dari versi 4.x, hanya Android SDK 24+ yang didukung secara default, dan androidx diperlukan.

Tambahkan yang berikut ini ke file build.gradle Anda:

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
}

Versi SDK yang lebih lama

Untuk Android SDK versi <24, Anda dapat menurunkan versi zxing: core ke 3.3.0 atau yang lebih lama untuk dukungan 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'
}

Anda juga akan membutuhkan ini di manifes Android Anda:

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

Sumber: https://github.com/journeyapps/zxing-android-embedded

Zhar
sumber
-1

tutorial ini membantu saya untuk mengintegrasikan ke studio android: http://wahidgazzah.olympe.in/integrating-zxing-in-your-android-app-as-standalone-scanner/ jika turun coba INI

tambahkan saja ke 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>

Semoga bantuan ini !.

hirigoshy
sumber
14
kedua tautan tersebut adalah 404
prgmrDev
Itu tidak membantu
deepakgates
@deepakgates: ketinggalan jaman, dapatkah Anda membawa beberapa kode untuk diperiksa?
hirigoshy