[android] Android Studio에 ZXing 통합

내가 한 모든 단계를 설명하기 시작하고 결국 문제가 무엇인지 설명하겠습니다.

  1. ZXing-2.2 다운로드 https://code.google.com/p/zxing/downloads/list
  2. 모든 zxing-2.2의 Extrac.
  3. Apache Ant http://www.youtube.com/watch?v=XJmndRfb1TU 다운로드 및 설치
  4. Windows 명령 줄 (실행-> CMD)을 사용하여 추출 된 디렉터리로 이동합니다.
  5. 명령 줄 창에서- ‘ant -f core / build.xml’을 입력하고 Enter 키를 누르고 Apache가 마술처럼 작동하도록합니다.

지금은 ZXing 라이브러리를 Android 애플리케이션에 직접 통합하는 것과 같습니다.

그러나 Wooops, “Buildfile : core \ build.xml이 존재하지 않습니다! 빌드에 실패했습니다. 좋습니다. 6. ZXing 가져 오기-core / build.xml 누락

이제 예, core.jar이 있습니다.

  1. Android Studio, File-> Import Project-> Select / android / in /zxing-2.2/-> Create project from existing sources-> Project name : andoid-> Source files for … all selected Next-> Libraries (cant 아무것도하지 않음) 다음-> 모듈 (안드로이드 확인) 다음-> SDK 1.7 다음-> 마침

프로젝트 열기-> 빌드-> 프로젝트 다시 빌드

100 개 오류 19 개 경고

파일-> 프로젝트 구조-> 라이브러리-> 추가-> Java-> 이전에 만든 core.jar을 선택하면 확인-> 라이브러리 ‘core’가 선택한 모듈에 추가됩니다. (android) OK-> 프로젝트 구조 대화 상자에서 OK.

빌드-> 프로젝트 다시 빌드

15 개 오류 20 개 경고

모든 오류는 오류입니다. 상수 표현식이 필요하고 Android에서 ZXing 프로젝트의 Switch 케이스에서 오류가 표시
됩니다. 다른 경우 모든 스위치를 변경합니다.

0 오류 20 경고

이제 계속합니다.

파일-> 새 프로젝트-> zxing_demo 다음-> 다음-> 빈 활동 다음-> 완료

새 프로젝트에서-> 파일-> 모듈 가져 오기-> 검색 및 선택 / android / 확인-> 기존 소스에서 모듈 만들기 다음-> 다음-> 다음-> 다음-> 마침

이제 탐색기 / android / / zging_demoProject / 및 외부 라이브러리에서 볼 수 있습니다.

이제 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 확인-> 적용 및 확인

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

나는 응용 프로그램과 의도를 사용할 것이라고 생각하지만 지금은이 작업을 원합니다.



답변

ZXING을 Android 애플리케이션에 통합하고 있었는데 입력을위한 좋은 소스가 없었습니다. 저에게 도움이되었던 방법에 대한 힌트를 드릴 것입니다. 왜냐하면 매우 쉬웠 기 때문 입니다.

zxing안드로이드 라이브러리 프로젝트를 AAR 아카이브로 제공하는 정말 편리한 git 저장소가 있습니다.

여러분이해야 할 일은 이것을 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에서 코드를 복사하여 붙여 넣은 것을 볼 수 있습니다. 그렇지 않은 경우 거기로 이동하여 더 많은 통찰력과 코드 예제를 얻으십시오.


답변

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


답변

같은 문제에 직면 한 사람은 누구나 간단한 단계를 따르십시오.

옵션을 사용하여 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'

    }

항상 최신 버전 coreandroid core아래 링크에서 찾을 수 있습니다 .

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

업데이트 (2019.05.29)

대신 다음 종속성을 추가하십시오.

dependencies {
    implementation 'com.google.zxing:core:3.4.0'
    implementation 'com.google.zxing:android-core:3.3.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 버전

Android SDK 버전이 24 미만인 경우 Android 14 이상 지원을 위해 zxing : core를 3.3.0 이하로 다운 그레이드 할 수 있습니다.

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


답변

이 튜토리얼 도움 나 안드로이드 스튜디오에 통합 할 수 :
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>

이 도움을 바랍니다!.


답변