145

私は絶望的にこれを書いています:)私は、Android 1.6電話に(概念の証明として)スタンドアロンのバーコードスキャナーを作成するように割り当てられました。

このために、ZXing ライブラリを発見しました。

私はグーグルで検索し、StackOverflowの関連トピックを読んで、常識などを使用しました。何も役に立たなかったようで、このメンタル封鎖に穴を開けることはできません:/

ライブラリを使用して、独自のスタンドアロン バーコード スキャナーを作成することが可能であることはわかっています。私は、Zxing の人々が提供する「バーコード スキャナー」を使用することが、最も簡単な解決策であることを読みました (Intent 経由)。残念ながら、これはオプションではなく、スタンドアロン アプリが必要です。

だから私の問題を要約するには:

  1. Eclipse を使用して ZXing ソース ライブラリを Android コード プロジェクトに統合するにはどうすればよいですか?
  2. 統合された場合...ライブラリを使用してスキャン機能を「ロード」するにはどうすればよいですか?
  3. 私はEclipseで作業を始めたばかりなので、ステップツーステップガイドがほとんど好まれています。

コード プロジェクトを ZXing ソース フォルダーの Android フォルダーに依存させようとしました。私がそうすると、主に「org.apache」に関するいくつかのエラーが発生します(??)

私はそれを理解することができません...そのため、いくつかのヒントが最も役立ちます。

事前に、ありがとう:)

4

17 に答える 17

128

アップデート!-解決済み+ガイド

私はそれを理解することができました:)そして下にあなたはステップバイステップのガイドを読むことができるので、うまくいけば私が持っていたのと同じ問題で他の人を助けることができます;)

  1. Apache Antをインストールします-(設定のヘルプについては、このYouTubeビデオを参照してください
  2. ZXingホームページからZXingソースをダウンロードして抽出します
  3. Windowsコマンドライン([実行]-> [CMD])を使用して、ダウンロードしたのルートディレクトリに移動しますzxing src
  4. コマンドラインウィンドウで-Enterキーant -f core/build.xmlを押してApacheを動作させると入力すると、魔法のようになります[問題がありますか?]
  5. 解凍したディレクトリのandroidフォルダに基づいて、Eclipse-> newAndroidProjectと入力します。
  6. プロジェクトフォルダを右クリック->プロパティ->Javaビルドパス->ライブラリ->外部JARの追加...
  7. 新しく抽出されたフォルダに移動し、コアディレクトリを開いて、[ core.jar... ]を選択します。Enterキーを押します。

これで、翻訳とAndroidManifest.xmlファイルのいくつかのエラーを修正する必要があります:)これで、問題なくコンパイルでき、ZXingソースに基づいたスタンドアロンのバーコードスキャナーアプリが機能するようになります;)

幸せなコーディングの人-私はそれが他の人を助けることができることを願っています:)

于 2011-01-28T07:18:33.697 に答える
83

サードパーティ製アプリケーションをインストールせずに、ZXing ライブラリを使用して QR コードを生成および表示する方法について、順を追って説明します。 注: ANT やその他のビルド ツールを使用して ZXing をビルドする必要はありません。このファイルcore.jarは、リリースされた zip アーカイブで入手できます (以下を参照)。

  1. ZXingの最新リリースをダウンロードします。-- ( ZXing-*.zip)
  2. この zip アーカイブを解凍し、ディレクトリcore.jarの下を見つけます。core/
  3. Eclipse IDE を使用している場合は、Android プロジェクトcore.jarのディレクトリにドラッグ アンド ドロップします。libs求められたら、 [コピー]を選択します。
  4. 以下の 2 つのクラス ( Contents.java& QRCodeEncoder.java) を Android プロジェクトのメイン パッケージにコピーします。
  5. アクティビティにアイテムを作成しImageViewて、生成された QR コードを表示します (まだ持っていない場合)。以下に例を示します。
  6. 以下のコード スニペットを使用して、QR コードをビットマップ形式で生成し、ImageView.

ImageViewアクティビティ レイアウト XML ファイルに追加する要素は次のとおりです。

<ImageView 
    android:id="@+id/qrCode"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="50dp"
    android:layout_centerHorizontal="true"/>

コードスニペット:

// ImageView to display the QR code in.  This should be defined in 
// your Activity's XML layout file
ImageView imageView = (ImageView) findViewById(R.id.qrCode);

String qrData = "Data I want to encode in QR code";
int qrCodeDimention = 500;

QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(qrData, null,
        Contents.Type.TEXT, BarcodeFormat.QR_CODE.toString(), qrCodeDimention);

try {
    Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
    imageView.setImageBitmap(bitmap);
} catch (WriterException e) {
    e.printStackTrace();
}

ここはContents.java

//
// * Copyright (C) 2008 ZXing authors
// * 
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with the License.
// * You may obtain a copy of the License at
// * 
// * http://www.apache.org/licenses/LICENSE-2.0
// * 
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// 

import android.provider.ContactsContract;

public final class Contents {
    private Contents() {
    }

    public static final class Type {

     // Plain text. Use Intent.putExtra(DATA, string). This can be used for URLs too, but string
     // must include "http://" or "https://".
        public static final String TEXT = "TEXT_TYPE";

        // An email type. Use Intent.putExtra(DATA, string) where string is the email address.
        public static final String EMAIL = "EMAIL_TYPE";

        // Use Intent.putExtra(DATA, string) where string is the phone number to call.
        public static final String PHONE = "PHONE_TYPE";

        // An SMS type. Use Intent.putExtra(DATA, string) where string is the number to SMS.
        public static final String SMS = "SMS_TYPE";

        public static final String CONTACT = "CONTACT_TYPE";

        public static final String LOCATION = "LOCATION_TYPE";

        private Type() {
        }
    }

    public static final String URL_KEY = "URL_KEY";

    public static final String NOTE_KEY = "NOTE_KEY";

    // When using Type.CONTACT, these arrays provide the keys for adding or retrieving multiple phone numbers and addresses.
    public static final String[] PHONE_KEYS = {
            ContactsContract.Intents.Insert.PHONE, ContactsContract.Intents.Insert.SECONDARY_PHONE,
            ContactsContract.Intents.Insert.TERTIARY_PHONE
    };

    public static final String[] PHONE_TYPE_KEYS = {
            ContactsContract.Intents.Insert.PHONE_TYPE,
            ContactsContract.Intents.Insert.SECONDARY_PHONE_TYPE,
            ContactsContract.Intents.Insert.TERTIARY_PHONE_TYPE
    };

    public static final String[] EMAIL_KEYS = {
            ContactsContract.Intents.Insert.EMAIL, ContactsContract.Intents.Insert.SECONDARY_EMAIL,
            ContactsContract.Intents.Insert.TERTIARY_EMAIL
    };

    public static final String[] EMAIL_TYPE_KEYS = {
            ContactsContract.Intents.Insert.EMAIL_TYPE,
            ContactsContract.Intents.Insert.SECONDARY_EMAIL_TYPE,
            ContactsContract.Intents.Insert.TERTIARY_EMAIL_TYPE
    };
}

QRCodeEncoder.java

/*
 * Copyright (C) 2008 ZXing authors
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import android.provider.ContactsContract;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.telephony.PhoneNumberUtils;

import java.util.Collection;
import java.util.EnumMap;
import java.util.HashSet;
import java.util.Map;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;

public final class QRCodeEncoder {
    private static final int WHITE = 0xFFFFFFFF;
    private static final int BLACK = 0xFF000000;

    private int dimension = Integer.MIN_VALUE;
    private String contents = null;
    private String displayContents = null;
    private String title = null;
    private BarcodeFormat format = null;
    private boolean encoded = false;

    public QRCodeEncoder(String data, Bundle bundle, String type, String format, int dimension) {
        this.dimension = dimension;
        encoded = encodeContents(data, bundle, type, format);
    }

    public String getContents() {
        return contents;
    }

    public String getDisplayContents() {
        return displayContents;
    }

    public String getTitle() {
        return title;
    }

    private boolean encodeContents(String data, Bundle bundle, String type, String formatString) {
        // Default to QR_CODE if no format given.
        format = null;
        if (formatString != null) {
            try {
                format = BarcodeFormat.valueOf(formatString);
            } catch (IllegalArgumentException iae) {
                // Ignore it then
            }
        }
        if (format == null || format == BarcodeFormat.QR_CODE) {
            this.format = BarcodeFormat.QR_CODE;
            encodeQRCodeContents(data, bundle, type);
        } else if (data != null && data.length() > 0) {
            contents = data;
            displayContents = data;
            title = "Text";
        }
        return contents != null && contents.length() > 0;
    }

    private void encodeQRCodeContents(String data, Bundle bundle, String type) {
        if (type.equals(Contents.Type.TEXT)) {
            if (data != null && data.length() > 0) {
                contents = data;
                displayContents = data;
                title = "Text";
            }
        } else if (type.equals(Contents.Type.EMAIL)) {
            data = trim(data);
            if (data != null) {
                contents = "mailto:" + data;
                displayContents = data;
                title = "E-Mail";
            }
        } else if (type.equals(Contents.Type.PHONE)) {
            data = trim(data);
            if (data != null) {
                contents = "tel:" + data;
                displayContents = PhoneNumberUtils.formatNumber(data);
                title = "Phone";
            }
        } else if (type.equals(Contents.Type.SMS)) {
            data = trim(data);
            if (data != null) {
                contents = "sms:" + data;
                displayContents = PhoneNumberUtils.formatNumber(data);
                title = "SMS";
            }
        } else if (type.equals(Contents.Type.CONTACT)) {
            if (bundle != null) {
                StringBuilder newContents = new StringBuilder(100);
                StringBuilder newDisplayContents = new StringBuilder(100);

                newContents.append("MECARD:");

                String name = trim(bundle.getString(ContactsContract.Intents.Insert.NAME));
                if (name != null) {
                    newContents.append("N:").append(escapeMECARD(name)).append(';');
                    newDisplayContents.append(name);
                }

                String address = trim(bundle.getString(ContactsContract.Intents.Insert.POSTAL));
                if (address != null) {
                    newContents.append("ADR:").append(escapeMECARD(address)).append(';');
                    newDisplayContents.append('\n').append(address);
                }

                Collection<String> uniquePhones = new HashSet<String>(Contents.PHONE_KEYS.length);
                for (int x = 0; x < Contents.PHONE_KEYS.length; x++) {
                    String phone = trim(bundle.getString(Contents.PHONE_KEYS[x]));
                    if (phone != null) {
                        uniquePhones.add(phone);
                    }
                }
                for (String phone : uniquePhones) {
                    newContents.append("TEL:").append(escapeMECARD(phone)).append(';');
                    newDisplayContents.append('\n').append(PhoneNumberUtils.formatNumber(phone));
                }

                Collection<String> uniqueEmails = new HashSet<String>(Contents.EMAIL_KEYS.length);
                for (int x = 0; x < Contents.EMAIL_KEYS.length; x++) {
                    String email = trim(bundle.getString(Contents.EMAIL_KEYS[x]));
                    if (email != null) {
                        uniqueEmails.add(email);
                    }
                }
                for (String email : uniqueEmails) {
                    newContents.append("EMAIL:").append(escapeMECARD(email)).append(';');
                    newDisplayContents.append('\n').append(email);
                }

                String url = trim(bundle.getString(Contents.URL_KEY));
                if (url != null) {
                    // escapeMECARD(url) -> wrong escape e.g. http\://zxing.google.com
                    newContents.append("URL:").append(url).append(';');
                    newDisplayContents.append('\n').append(url);
                }

                String note = trim(bundle.getString(Contents.NOTE_KEY));
                if (note != null) {
                    newContents.append("NOTE:").append(escapeMECARD(note)).append(';');
                    newDisplayContents.append('\n').append(note);
                }

                // Make sure we've encoded at least one field.
                if (newDisplayContents.length() > 0) {
                    newContents.append(';');
                    contents = newContents.toString();
                    displayContents = newDisplayContents.toString();
                    title = "Contact";
                } else {
                    contents = null;
                    displayContents = null;
                }

            }
        } else if (type.equals(Contents.Type.LOCATION)) {
            if (bundle != null) {
                // These must use Bundle.getFloat(), not getDouble(), it's part of the API.
                float latitude = bundle.getFloat("LAT", Float.MAX_VALUE);
                float longitude = bundle.getFloat("LONG", Float.MAX_VALUE);
                if (latitude != Float.MAX_VALUE && longitude != Float.MAX_VALUE) {
                    contents = "geo:" + latitude + ',' + longitude;
                    displayContents = latitude + "," + longitude;
                    title = "Location";
                }
            }
        }
    }

    public Bitmap encodeAsBitmap() throws WriterException {
        if (!encoded) return null;

        Map<EncodeHintType, Object> hints = null;
        String encoding = guessAppropriateEncoding(contents);
        if (encoding != null) {
            hints = new EnumMap<EncodeHintType, Object>(EncodeHintType.class);
            hints.put(EncodeHintType.CHARACTER_SET, encoding);
        }
        MultiFormatWriter writer = new MultiFormatWriter();
        BitMatrix result = writer.encode(contents, format, dimension, dimension, hints);
        int width = result.getWidth();
        int height = result.getHeight();
        int[] pixels = new int[width * height];
        // All are 0, or black, by default
        for (int y = 0; y < height; y++) {
            int offset = y * width;
            for (int x = 0; x < width; x++) {
                pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
            }
        }

        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
        return bitmap;
    }

    private static String guessAppropriateEncoding(CharSequence contents) {
        // Very crude at the moment
        for (int i = 0; i < contents.length(); i++) {
            if (contents.charAt(i) > 0xFF) { return "UTF-8"; }
        }
        return null;
    }

    private static String trim(String s) {
        if (s == null) { return null; }
        String result = s.trim();
        return result.length() == 0 ? null : result;
    }

    private static String escapeMECARD(String input) {
        if (input == null || (input.indexOf(':') < 0 && input.indexOf(';') < 0)) { return input; }
        int length = input.length();
        StringBuilder result = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            char c = input.charAt(i);
            if (c == ':' || c == ';') {
                result.append('\\');
            }
            result.append(c);
        }
        return result.toString();
    }
}
于 2013-03-19T21:23:12.810 に答える
17

compile 'com.google.zxing:core:2.3.0'

残念ながら私にはうまくいきませんでした。

これは私のために働いたものです:

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

ここでリンクを見つけてください: https://github.com/journeyapps/zxing-android-embedded

于 2015-07-07T09:31:22.647 に答える
11

ANT でのビルドに問題がありますか? 読み続けます

ant -f core/build.xml 次のような場合:

Unable to locate tools.jar. Expected to find it in
C:\Program Files\Java\jre6\lib\tools.jar

次に、JAVA_HOME環境変数を適切な Java フォルダーに設定します。私の(Windows用)にtools.jarが見つかりました:

C:\Program Files\Java\jdk1.6.0_21\lib

だから私は自分JAVA_HOMEを次のように設定しました:

C:\Progra~1\Java\jdk1.6.0_25

あるサイトで見つけた短い構文の理由は次のとおりです。

「パス名にスペースを含まないインストール ディレクトリを選択することを強くお勧めします (たとえば、C:\Program Files にはインストールしないでください)。Java がそのようなディレクトリにインストールされている場合は、JAVA_HOME を設定することが重要です。環境変数をスペースを含まないパス (例: C:\Progra~1) に変更します。これを行わないと、JAVA_HOME の値に依存する一部のプログラムで例外がスローされます。」

次に、cmdを再起動しました(DOSシェルは起動時に環境変数のみを読み取るため、環境変数を変更するには新しいシェルを使用して更新された値を取得する必要があるため重要です)

そして最後にant -f core/build.xml働きました。

于 2011-06-03T17:59:45.853 に答える
5

置く

compile 'com.google.zxing:core:2.3.0' 

Gradle の依存関係に追加します。それと同じくらい簡単です。Android Studio と Gradle ビルド システムを使用する前。

于 2015-02-15T04:46:27.170 に答える
4

zxing Web サイトのwiki ページを見たことがありますか? GettingStartedDeveloperNotesScanningViaIntentが役に立つと思われるかもしれません。

于 2011-01-24T17:29:45.303 に答える
2

zxing の連中は、1.7 で Android プロジェクトを簡単に作成できるようにしました。以前ほど痛くはありません。これは、Android 用の zxing プロジェクトをすばやく作成したい人のための簡単なブログです。

  • zxing.org から zxing ソースをチェックアウトします
  • Eclipse で Android プロジェクトを作成する
  • main.xml を削除
  • 「src」ディレクトリを右クリックし、インポートをクリックします。次のディレクトリを記載されている順序で参照します。それらをインポート用に 1 つずつ追加するときは、インポート ウィザードの編集フィールドに src ディレクトリがあることを確認してください。そして、左側のディレクトリ ツリーで「com」ディレクトリのみを選択します。src を選択しないでください。
  • アンドロイド統合
  • アンドロイド
  • Android SDK のバージョンが 9 であることを確認してください。
  • いずれかの言語の Strings.xml はクリブになります。' 文字の前に / を付けるだけです。

zxing 1.7 用の Android プロジェクト (6 月 20 日チェックアウト)。

http://www.4shared.com/file/bFx8Y5Ys/zXingJune2010.html (もう利用できません)

于 2012-02-02T08:14:39.310 に答える
2

Eclipseでzxing 3.2.1をセットアップするためのステップバイステップ

  1. 「 https://github.com/zxing/zxing」から zxing-master.zip をダウンロードします。
  2. zxing-master.zip を解凍し、eclipse を使用して「android」プロジェクトを zxing-master にインポートします。
  3. 「 http://repo1.maven.org/maven2/com/google/zxing/core/3.2.1/」から core-3.2.1.jar をダウンロードします。
  4. 「android」プロジェクトに「libs」フォルダーを作成し、cor-3.2.1.jar を libs フォルダーに貼り付けます。
  5. プロジェクトをクリックします。「プロパティ」->「Java コンパイラ」を選択して、レベルを 1.7 に変更します。次に、[Android] をクリックして、[プロジェクトのビルド ターゲット] を Android 4.4.2+ に変更します。これは、1.7 を使用するには Android 4.4 でコンパイルする必要があるためです。
  6. 「CameraConfigurationUtils.java」が「zxing-master/android/app/src/main/java/com/google/zxing/client/android/camera/」に存在しない場合。「zxing-master/android-core/src/main/java/com/google/zxing/client/android/camera/」からコピーして、プロジェクトに貼り付けることができます。
  7. プロジェクトをクリーンアップしてビルドします。プロジェクトで「switch - case」に関するエラーが表示される場合は、「if - else」に変更する必要があります。
  8. 完成しました。プロジェクトをクリーンアップしてビルドします。
  9. 参照リンク: ZXing を使用して Android バーコード スキャン アプリを作成する
于 2015-11-05T06:52:41.737 に答える
2

Google Play サービス (バージョン7.8.0以降) にバーコード デコーダが含まれている場合に、外部ライブラリを使用する理由。

于 2016-02-29T17:08:16.083 に答える
2

これを実現するためにあらゆる方法を試した結果、JourneyApps による xZing の縮小版を発見しました。私はそれをEclipse用に移植し、GitHubで共有しました。

Eclipse を使用している場合は、このプロジェクトを使用します。

https://github.com/hiteshsahu/XZing-Barcode-Scanner-Minified-Eclipse

Studio を使用している場合は、このプロジェクトを使用してください:-

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

利点

  1. アプリに組み込まれたバーコード スキャナーは、playstore を使用してサードパーティのアプリをインストールする必要はありません。

  2. コア、Android クライアントなどの jar の間で混乱する必要はありません。このパッケージと関連するレイアウトをプロジェクトにドロップするだけで、準備完了です。必要な Jar はcom.google.zxing:core:3.2.0だけです。これは次からダウンロードできます。

    http://mvnrepository.com/artifact/com.google.zxing/core/3.2.0

  3. 大量のパッケージを追加する必要はありません比較のために下の画像を参照してください

前 :-

ここに画像の説明を入力

後 :-

ここに画像の説明を入力

  1. 最も重要な部分は、それらが高度にカスタマイズ可能であることです。フラッシュライトを追加したり、フラグメントで使用したり、向きの変更をサポートしたりできます。

  2. このキャプチャ アクティビティは、Cordova アプリでバーコード スキャンに使用できます。

アプリ マニフェストのキャプチャ アクティビティは次のようになります。

  <activity
            android:name="com.journeyapps.barcodescanner.CaptureActivity"
            android:clearTaskOnLaunch="true"
            android:configChanges="orientation|keyboardHidden"
            android:exported="false"
            android:screenOrientation="fullSensor"
            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>

プラグインは次のようになります

public class BarcodeScanner extends CordovaPlugin {
    public static final int REQUEST_CODE = 0x0ba7c0de;

    private static final String SCAN = "scan";
    private static final String CANCELLED = "cancelled";
    private static final String FORMAT = "format";
    private static final String TEXT = "text";
    private static final String SCAN_INTENT = "com.google.zxing.client.android.SCAN";

    private static final String LOG_TAG = "BarcodeScanner";

    private CallbackContext callbackContext;

    /**
     * Constructor.
     */
    public BarcodeScanner() {


    }

    /**
     * Executes the request.
     *
     * This method is called from the WebView thread. To do a non-trivial amount of work, use:
     *     cordova.getThreadPool().execute(runnable);
     *
     * To run on the UI thread, use:
     *     cordova.getActivity().runOnUiThread(runnable);
     *
     * @param action          The action to execute.
     * @param args            The exec() arguments.
     * @param callbackContext The callback context used when calling back into JavaScript.
     * @return                Whether the action was valid.
     *
     * @sa https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/CordovaPlugin.java
     */
    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) {
        this.callbackContext = callbackContext;
        if (action.equals(SCAN)) {
            scan(args);
        } else {
            return false;
        }
        return true;
    }

    /**
     * Starts an intent to scan and decode a barcode.
     */
    public void scan(JSONArray args) {
        Intent intentScan = new Intent(SCAN_INTENT);
        intentScan.addCategory(Intent.CATEGORY_DEFAULT);

        // add config as intent extras
        if(args.length() > 0) {

            JSONObject obj;
            JSONArray names;
            String key;
            Object value;

            for(int i=0; i<args.length(); i++) {

                try {
                    obj = args.getJSONObject(i);
                } catch(JSONException e) {
                    Log.i("CordovaLog", e.getLocalizedMessage());
                    continue;
                }

                names = obj.names();
                for(int j=0; j<names.length(); j++) {
                    try {
                        key = names.getString(j);
                        value = obj.get(key);

                        if(value instanceof Integer) {
                            intentScan.putExtra(key, (Integer)value);
                        } else if(value instanceof String) {
                            intentScan.putExtra(key, (String)value);
                        }

                    } catch(JSONException e) {
                        Log.i("CordovaLog", e.getLocalizedMessage());
                        continue;
                    }
                }
            }

        }

        // avoid calling other phonegap apps
        intentScan.setPackage(this.cordova.getActivity().getApplicationContext().getPackageName());

        this.cordova.startActivityForResult((CordovaPlugin) this, intentScan, REQUEST_CODE);
    }

    /**
     * Called when the barcode scanner intent completes.
     *
     * @param requestCode The request code originally supplied to startActivityForResult(),
     *                       allowing you to identify who this result came from.
     * @param resultCode  The integer result code returned by the child activity through its setResult().
     * @param intent      An Intent, which can return result data to the caller (various data can be attached to Intent "extras").
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == REQUEST_CODE) {
            if (resultCode == Activity.RESULT_OK) {
                JSONObject obj = new JSONObject();
                try {
                    obj.put(TEXT, intent.getStringExtra("SCAN_RESULT"));
                    obj.put(FORMAT, intent.getStringExtra("SCAN_RESULT_FORMAT"));
                    obj.put(CANCELLED, false);
                } catch (JSONException e) {
                    Log.d(LOG_TAG, "JSONException "+e.getMessage());
                }
                this.callbackContext.success(obj);
            } else if (resultCode == Activity.RESULT_CANCELED) {
                this.callbackContext.success("");
            } else {
                this.callbackContext.error("Technical Problem");
            }
        }
    }
}

ハッピーインテグレーション!!

于 2016-01-22T07:52:47.387 に答える
1

このライブラリは魅力のように機能し、統合と使用が簡単です。https://github.com/dm77/barcodescanner

于 2019-11-01T10:17:16.780 に答える