web-dev-qa-db-ja.com

Android St​​udioにZXingを統合する

私がやったすべてのステップの説明を始め、最終的には何が問題なのかを説明します。

  1. ZXing-2.2のダウンロード https://code.google.com/p/zxing/downloads/list
  2. Zxing-2.2のすべてのエクストラ。
  3. Apache Antをダウンロードしてインストールします http://www.youtube.com/watch?v=XJmndRfb1T
  4. Windowsコマンドライン(Run-> CMD)を使用して、抽出されたディレクトリに移動します
  5. コマンドラインウィンドウで-「ant -f core/build.xml」と入力してEnterキーを押し、Apacheに魔法をかける

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

しかし、「ビルドファイル:core\build.xmlが存在しません!ビルドに失敗しました。OK。6. ZXingのインポート-core/build.xmlが見つかりません

はい、core.jarがあります。

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

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

100エラー19警告

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

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

15エラー20警告

すべてのエラーはエラーです:定数式が必要です AndroidのZXingプロジェクトのSwitchケースのエラー if elseのすべてのスイッチを変更します。

0エラー20警告

OK、今すぐ続けます:

ファイル->新しいプロジェクト-> zxing_demo次->次->空白のアクティビティ次->完了

新しいプロジェクト->ファイル->モジュールのインポート->検索して/ Android/OKを選択->既存のソースからモジュールを作成次->次->次->次->完了

これで、Explorer/Android// zging_demoProject /および外部ライブラリで確認できます

今、コードを変更しますtu scan 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 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

私はアプリケーションとインテントを使用すると思いますが、今は誰かが私に教えてくれたら、この仕事をしたいと思っています。

84
Victor Company

私はZXINGをAndroidアプリケーションに統合していましたが、入力用の良いソースはありませんでした。何がうまくいったかについてのヒントを示します-簡単

zxing Androidライブラリプロジェクトを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();

これらにはsample-projectがあり、いくつかの統合例を提供しています。

既にリンクにアクセスしている場合は、git READMEからコードをコピーして貼り付けただけです。そうでない場合は、そこからさらに洞察とコード例を入手してください。

217
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'
}
6
Hardip

同じ問題に直面している人は誰でも、簡単な手順に従ってください。

オプションImport project (Eclipse ADT, Gradle, etc.)を使用して、ダウンロードしたzxing-master ZipファイルからプロジェクトAndroidをインポートし、アプリレベル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.1https://mvnrepository.com/artifact/com.google.zxing/Android- core/3.2.

更新(2019年5月29日)

代わりにこれらの依存関係を追加します。

dependencies {
    implementation 'com.google.zxing:core:3.4.0'
    implementation 'com.google.zxing:Android-core:3.3.0'
}
4
Smeet