ZXingをAndroid Studioに統合する


93

私が行ったすべてのステップの説明を開始し、最後に何が問題なのかを説明します。

  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コマンドライン(Run-> CMD)を使用して、抽出したディレクトリに移動します
  5. コマンドラインウィンドウで「ant -f core / build.xml」と入力してEnterキーを押すと、Apacheが魔法のように動作します

現時点では、ZXingライブラリをAndroidアプリケーションに直接統合するようなものです

しかし、Woops、「Buildfile:core \ build.xml does not exist!Build failed。OK。6 . Importing ZXing-missing core / build.xml

今はい、私は私のcore.jarを持っています。

  1. Android Studioを開き、ファイル->プロジェクトのインポート-/ /zxing-2.2/で/ android /を選択->既存のソースからプロジェクトを作成->プロジェクト名:andoid->ソースファイル...すべてチェック済み次へ->ライブラリ(カント何もしない)次へ->モジュール(Androidチェック)次へ-> SDK 1.7次へ->完了

プロジェクトを開く->ビルド->プロジェクトを再ビルド

100エラー19警告

ファイル->プロジェクトの構造->ライブラリ->追加-> Java->前に作成したcore.jarを選択してOK->ライブラリ 'core'が選択したモジュールに追加されます。(android)OK->プロジェクト構造ダイアログでOK。

ビルド->プロジェクトの再ビルド

15エラー20警告

すべてのエラーはエラーです:定数式が必要ですが、AndroidのZXingプロジェクトのスイッチケースにエラーが表示されます。他の場合は、すべてのスイッチ を変更します。

エラー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->依存関係->追加->モジュール依存関係->アンドロイドOK->適用して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/...
ダニエル・ウィルソン

回答:


234

私はZXINGをAndroidアプリケーションに統合していましたが、すべての入力に適切なソースがありませんでした。私にとって何がうまくいったかについてのヒントを提供します- それは非常に簡単であることが判明したからです。

zxingAndroidライブラリプロジェクトを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からコードをコピーして貼り付けただけです。そうでない場合は、そこに行って、さらに洞察とコード例を入手してください。


3
巨大な助け。別のプロジェクトからZxingをインポートしようとして1日以上費やしましたが、どこにも行きませんでした。次に、このリンクとBAMが見つかりました。このリンクから上記のコード例に従ってください:github.com/zxing/zxing/wiki/Scanning-Via-Intent
Jack BeNimble 2015

1
コードワークス!! 問題が1つあります。スキャナーのポートレートが必要で、画面をスキャンするためのカスタムレイアウトを追加する必要があります。達成方法を教えてもらえますか?
Harsh Trivedi、2015年

2
向きを変更するには、CaptureActivityを拡張する新しいアクティビティを作成し、AndroidManifest.xmlで向きを指定します。
ChaturaM 2015

FragmentでContinuousCaptureを使用してアプリを実行しようとすると、タスク ':app:transformClassesWithDexForDebug'のError:Executionが失敗しました。> com.android.build.transform.api.TransformException:com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:Process 'command' C:\ Program Files \ Java \ jdk1.8.0 _60 \ bin \ java.exe ''はゼロ以外の終了値2で終了しました
Konstantin Konopko

1
@Janpan; はい、そうです!
Langusten Gustel 2016年

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ファイルに次の2行のコードを追加すると、実行する準備が整います。

とてもシンプルです。

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 simple answer :)多くの研究開発の後、私はこのリンクを見つけました、そして魔法が起こったようです。
Ramkesh Yadav

1
現在、最新バージョンのコアとAndroidコアは依存関係です{// 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

これを新しいプロジェクトとしてインポートしたくない既存のプロジェクトにマージしたいので、どうすればこれを達成できますか?緊急の支援が必要です:)
Ramkesh Yadav

ありがとう!また、プロジェクトをインポートして依存関係を追加する必要もありました。
CoolMind 2018

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の場合、zxing:coreをAndroid 14以降をサポートするために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


-1

このチュートリアルの助け私はアンドロイドのスタジオに統合する: 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 2018

@deepakgates:古くなっています。チェックするコードをいくつか持参できますか?
hirigoshy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.