ZXing'i Android Studio'ya entegre edin


94

Yaptığım tüm adımları ve sonunda sorunun ne olduğunu açıklamaya başlayacağım.

  1. ZXing-2.2'yi indirin https://code.google.com/p/zxing/downloads/list
  2. Tümünü zxing-2.2'de çıkarın.
  3. Apache Ant'ı indirin ve yükleyin http://www.youtube.com/watch?v=XJmndRfb1TU
  4. Windows Komut Satırı (Çalıştır-> CMD) kullanımıyla, çıkarılan dizine gidin
  5. Komut satırı penceresinde - 'ant -f core / build.xml' yazın, enter'a basın ve Apache'nin çalışmasına izin verin, bu sihirli

Şu anda, ZXing kitaplığını doğrudan Android uygulamama entegre etmeye benziyor

Ama Wooops, "Buildfile: core \ build.xml mevcut değil! Oluşturulamadı. Tamam. 6. ZXing içe aktarılıyor - eksik core / build.xml

Şimdi evet, core.jar'ım var.

  1. Android Studio'yu açın, Dosya -> Projeyi İçe Aktar -> / android / in /zxing-2.2/ -> Mevcut kaynaklardan proje oluşturun -> Proje adı: andoid -> Kaynak dosyaları ... tümü işaretlendi İleri -> Kitaplıklar (cant hiçbir şey yapmayın) Sonraki -> Modüller (android işaretli) Sonraki -> SDK 1.7 Sonraki -> Bitir

Project Open -> Build -> Rebuild projesi ile

100 hata 19 uyarı

Dosya -> Proje Yapısı -> Kitaplıklar -> Ekle -> Java -> Daha önce oluşturduğum core.jar'ı seçin ve Tamam -> Kitaplık 'çekirdek' seçilen modüllere eklenecektir. (android) Tamam -> Ve Tamam, Proje Yapısı İletişim Kutusunda.

Build -> Rebuild Projesi

15 hata 20 uyarı

Tüm hatalar hatadır: sabit ifade gerekli ve Android'de ZXing projesinin Switch durumlarında Hata görüyorum , eğer başkaları için tüm anahtarları değiştiriyorum.

0 hata 20 uyarı

Tamam, şimdi devam et:

Dosya -> Yeni proje -> zxing_demo Sonraki -> Sonraki -> Sonraki Boş Etkinlik -> Bitir

Yeni projede -> Dosya -> Modülü içe aktar -> Ara ve seç / android / Tamam -> Mevcut kaynaklardan modül oluştur Sonraki -> İleri -> Sonraki -> Sonraki -> Bitir

Şimdi explorer / android / / zging_demoProject / ve Harici Kitaplıklar'da görebiliyorum

Şimdi kodumu değiştiriyorum, QR taraması yapıyorum

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

}

Şimdi test edin, Çalıştır -> Hata Ayıkla

Ve 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

AndroidManifest.xml'de bu satırda görebiliyorum

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

Kırmızı "CaptureActivity" ve hata mesajı: "CaptureActivity" sembolü çözülemiyor

Dosya -> Proje Yapısı -> Modüller -> zxing_demo -> Bağımlılıklar -> Ekle -> Modül bağımlılığı -> android Tamam -> Uygula ve Tamam

CaptureActivity şimdi iyi görünüyor

Tekrar hata ayıklayın

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

Sanırım uygulamayı ve niyetleri kullanacağım ama şimdi bu işi yapmak istiyorum, eğer biri şimdi ne olduğunu söylerse lütfen.


Bu sorunun pek çok görüşü var, bu yüzden herhangi birine yardımcı olması durumunda [işte benim çok benzer sorunum] [1] [1]: stackoverflow.com/questions/20334572/…
Daniel Wilson

Yanıtlar:


239

ZXING'i bir Android uygulamasına entegre ediyordum ve tüm girdiler için iyi kaynaklar yoktu, benim için neyin işe yaradığına dair size bir ipucu vereceğim - çünkü çok kolay olduğu ortaya çıktı .

zxingAndroid kitaplık projesini bir AAR arşivi olarak sunan gerçekten kullanışlı bir git deposu var .

Tek yapmanız gereken bunu build.gradle'a eklemek.

repositories {
    jcenter()
}

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

ve Gradle, kodu derlemek ve uygulamanızda erişilebilir kılmak için tüm sihri yapar.

Tarayıcıyı daha sonra başlatmak için bu sınıfı / yöntemi kullanın: Etkinlikten:

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

Bir Parçadan:

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

Birkaç özelleştirme seçeneği vardır:

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

Onlar sahip örnek projeyi ve çeşitli entegrasyon örnekleri sunuyoruz:

Bağlantıyı daha önce ziyaret ettiyseniz, kodu git README'den kopyalayıp yapıştırdığımı göreceksiniz. Değilse, daha fazla bilgi ve kod örneği almak için oraya gidin.


3
Büyük yardım. Zxing'i başka bir projeden ithal etmek için bir günden fazla zaman harcadım ve hiçbir yere varamıyordum. Sonra bu bağlantıyı buldum ve BAM bitti. Bu bağlantıdan yukarıdaki kod örneğini takip edin: github.com/zxing/zxing/wiki/Scanning-Via-Intent .
Jack BeNimble

1
Kod Çalışıyor !! Bir sorunum var, tarayıcı portresi istiyorum ve tarama ekranı için özel düzen eklemem gerekiyor Herhangi biri bana nasıl başaracağımı söyleyebilir mi?
Harsh Trivedi

2
Yönü değiştirmek için, CaptureActivity'yi genişleten yeni bir Activity oluşturun ve AndroidManifest.xml'nizde yönü belirtin.
ChaturaM

Uygulamamı Parçada ContinuousCapture kullanarak çalıştırmaya çalışırken: Hata: ': app: transformClassesWithDexForDebug' görevi için yürütme başarısız oldu. > com.android.build.transform.api.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: İşlem 'komutu' C: \ Program Files \ Java \ jdk1.8.0 _60 \ bin \ java.exe '' sıfır olmayan çıkış değeri 2 ile tamamlandı
Konstantin Konopko

1
@Janpan; Evet öyle!
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'
}

7

Aynı sorunlarla karşılaşan herkes, basit adımları izleyin:

Seçeneği kullanarak androidindirilen zxing-masterzip dosyasından projeyi içe aktarın ve Import project (Eclipse ADT, Gradle, etc.)aşağıdaki 2 satırlık kodları uygulama seviyesi build.gradledosyanıza ekleyin ve çalışmaya hazırsınız.

Çok basit, 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'

    }

Her zaman en son sürümü coreve android coreaşağıdaki bağlantılardan bulabilirsiniz:

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

GÜNCELLEME (29.05.2019)

Bunun yerine şu bağımlılıkları ekleyin:

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

Perefct basit cevap :) Birçok Ar-Ge'den sonra bu bağlantıyı buldum ve bir sihir gerçekleşmiş gibi görünüyor.
Ramkesh Yadav

1
şimdi En son sürüm Core ve Android Core bağımlılıklardır {// mvnrepository.com/artifact/com.google.zxing/core uygulama grubu: 'com.google.zxing', ad: 'core', sürüm: '3.3.2' / / mvnrepository.com/artifact/com.google.zxing/android-core uygulama grubu: 'com.google.zxing', ad: 'android-core', sürüm: '3.3.0'}
Ramkesh Yadav

Bunu zaten yapılmış bir projede birleştirmek istiyorum, yeni proje olarak ithal etmek istemiyorum, peki bunu nasıl başarabilirim? acil yardım gerekli :)
Ramkesh Yadav

Teşekkürler! Ayrıca projeyi içe aktarmak ve bağımlılıklar eklemek zorunda kaldım.
CoolMind

0

4.x sürümünden itibaren, yalnızca Android SDK 24+ varsayılan olarak desteklenmektedir ve androidx gereklidir.

Build.gradle dosyanıza aşağıdakileri ekleyin:

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
}

Eski SDK sürümleri

24'ten küçük Android SDK sürümlerinde, Android 14+ desteği için zxing: core'u 3.3.0 veya önceki bir sürüme düşürebilirsiniz:

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

Buna Android bildiriminizde de ihtiyacınız olacak:

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

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


-1

bu eğitim android stüdyosuna entegre olmama yardımcı oluyor: http://wahidgazzah.olympe.in/integrating-zxing-in-your-android-app-as-standalone-scanner/ eğer aşağı BUNU deneyin

sadece AndroidManifest.xml'e ekleyin

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

Umarım bu yardımcı olur !.


14
her iki bağlantı da 404
prgmrDev

Bu yardımcı olmadı
deepakgates

@deepakgates: modası geçmiş, kontrol etmek için bir kod getirebilir misin?
hirigoshy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.