web-dev-qa-db-ja.com

バーコードスキャナーアプリを使用せずにZxingライブラリを埋め込む

Zxingライブラリを埋め込み、バーコードスキャナーアプリをインストールせずにスキャンを提供するための推奨される方法は何ですか?私はAndroidに追加のインストールをユーザーに要求することなく、Android $ ===に埋め込みたいと考えています。(iPhone srcの動作に似ています)。

58
Joey Schluchter

Intent で統合するのは本当に簡単です。より信頼性が高く、更新が自動的に取得されます。アドバイスはしませんが...

完全なソースコードは ZXing プロジェクトから入手できます。 core.jarからcore/をビルドし、それをAndroid lib/]フォルダーに入れて、アプリにコアデコーダーを含めます。 include javase。バーコードスキャナーのソースであるAndroid/のコードを見ることができますが、著者としては、コピーして貼り付けるだけではないことをお勧めします。

Apache licensed です。これは、ユーザーにライセンス条項へのアクセス権を本質的に付与する限り、自由に使用できることを意味します。

59
Sean Owen

Android QR /バーコード/マルチフォーマットデコーダー。

ZXing APIを使用してAndroidアプリケーションを作成し、アプリケーションにデコードコードのみを埋め込みました。このデコーダーへの入力は、AndroidエミュレーターのSDカードを介して与えられました。

手順は次のとおりです。

  1. まず、SDカードとカメラの機能をオンにして、Eclipse IDEでAVD(エミュレータ)バージョン4を作成しました。

  2. 次に、コマンドプロンプトで以下のコマンドを使用してSDCardを作成しました。

    c:\>mksdcard 40M mysdcard.iso
    

40Mは作成したSDカードのサイズです。これはC:ドライブに保存されます。 .iso部分が重要であることに注意してください。

  1. 次に、コマンドプロンプトで以下のコマンドを使用して、SDカードをエミュレーターにマウントする必要があります。

     c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
    

ここで、myavd4は、ステップ1で作成したエミュレーター/ Android仮想デバイスの名前です。avd名の前の「@」記号も重要です。

エミュレータを常に実行し続けます。閉じられた場合は、上記の3つの手順をやり直す必要があります。

  1. コマンドプロンプトで以下のコマンドを使用して、エミュレータにマウントされたこのSDカードに、持っているQRコードまたは他のコードイメージをプッシュできます。

    c:\>adb Push "c:\myqrcode.png" /sdcard
    
  2. 次に、Eclipse IDEで、新しいAndroidプロジェクトを開始します。以下のコードをプロジェクトのQRDecoder.Javaファイルに貼り付ける必要があります。

    package com.example.palani;
    import Android.app.Activity;
    import Android.content.Intent;
    import Android.graphics.Bitmap;
    import Android.graphics.BitmapFactory;
    import Android.net.Uri;
    import Android.os.Bundle;
    import Android.view.View;
    import Android.view.View.OnClickListener;
    import Android.widget.TextView;
    import com.google.zxing.BarcodeFormat;
    import com.google.zxing.BinaryBitmap;
    import com.google.zxing.ChecksumException;
    import com.google.zxing.FormatException;
    import com.google.zxing.LuminanceSource;
    import com.google.zxing.MultiFormatReader;
    import com.google.zxing.NotFoundException;
    import com.google.zxing.Reader;
    import com.google.zxing.Result;
    import com.google.zxing.ResultPoint;
    import com.google.zxing.client.androidtest.RGBLuminanceSource;
    import com.google.zxing.common.HybridBinarizer;
    public class QRDecoder extends Activity implements OnClickListener {
        public static class Global
        {
            public static String text=null;
        }
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Bitmap bMap = BitmapFactory.decodeFile("/sdcard/myqrcode.png");
            TextView textv = (TextView) findViewById(R.id.mytext);
            View webbutton=findViewById(R.id.webbutton);
            LuminanceSource source = new RGBLuminanceSource(bMap); 
            BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
            Reader reader = new MultiFormatReader();
            try {
                 Result result = reader.decode(bitmap);
                 Global.text = result.getText(); 
                    byte[] rawBytes = result.getRawBytes(); 
                    BarcodeFormat format = result.getBarcodeFormat(); 
                    ResultPoint[] points = result.getResultPoints();
                    textv.setText(Global.text);
                    webbutton.setOnClickListener(this);
            } catch (NotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ChecksumException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (FormatException e) {
                // TODO Auto-generated catch block
        e.printStackTrace();
    
    
            }   
        }
    
        @Override
        public void onClick(View v) {
            Uri uri = Uri.parse(Global.text); 
            Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
            startActivity(intent);
    
        }
    
    }
    
  3. 次に、以下のリンクからZXingソースコード(ZXing-1.6.Zip)をダウンロードしました。

    http://code.google.com/p/zxing/downloads/list
    

次に、これを抽出し、D:\ zxing-1.6\core\src\comに移動します

comフォルダーをコピーして、Eclipseのパッケージに貼り付けます。

(注、プロジェクトのパッケージを右クリックして貼り付けます...既存のフォルダーを置き換えるように求められたら、はいを選択します)

  1. 次に、res/layout/main.xmlファイルに以下のコードをコピーして貼り付けます

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:orientation="vertical"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:padding="20dip"
        >
    
    <TextView
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    
    Android:textColor="@color/mbackground1"
    Android:gravity="center_horizontal"
    Android:text="@string/decode_label"
    Android:padding="20dip" 
    />
    
    <TextView
    Android:id="@+id/mytext"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:gravity="center_horizontal"
    Android:background="@color/mbackground2" 
    Android:textColor="@color/mytextcolor" 
    Android:padding="20dip"
    />
    
    
     <TextView
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:text="@string/continue_label"
    Android:gravity="center_horizontal"
    Android:textColor="@color/mytextcolor"
    Android:padding="20dip"
    />
    
    <Button 
    Android:id="@+id/webbutton"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:text="@string/web_button"
    Android:textColor="@color/mytextcolor"
    />
    
    </LinearLayout>
    
  2. 次に、res/values/strings.xmlファイルに以下のコードをコピーして貼り付けます

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, QRDecoder!</string>
        <string name="app_name">QRDecoder</string>
        <string name="continue_label">Click below to load the URL!!</string>
        <string name="web_button">Load the URL!!</string>
        <string name="decode_label">Decoded URL</string>
    
    </resources>
    
  3. 次に、res/values/color.xmlファイルに以下のコードをコピーして貼り付け、存在しない場合は作成します。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="mbackground1">#7cfc00</color>
    <color name="mbackground2">#ffff00</color>
    <color name="mytextcolor">#d2691e</color>
    </resources>
    
  4. 次に、開始タグの後にマニフェストファイルで以下のコードをコピーして貼り付けます

    <manifest>
    
    
    <uses-permission Android:name="Android.permission.INTERNET" />
      <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
      <uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />      
    
  5. これで、上記の手順が完了しました...アプリケーションの準備が整いました。これで、uはアプリケーションを実行でき、指定した入力画像のデコード結果をuで取得できます。

  6. 入力を変更するには、コマンドプロンプトで次のコマンドを使用して別のファイルをSDカードにプッシュします

    c:\>adb Push "c:\image2.png" /sdcard
    

qRDecoder.Javaの入力を変更して同じものを反映する

    Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");

入力は、QRCode、バーコードなどの任意の形式にすることができます。画像のタイプは、bmp、jpg、またはpngにすることができます。

テスト目的でQRコードを生成するために以下のWebサイトを使用しました

http://barcode.tec-it.com/

AND http://qrcode.kaywa.com

おかげで、私はAndroidおよびモバイルアプリケーション開発の初心者であり、間違いをおかけして申し訳ありません。

29
Palani Babu

現在 を使用できます Googleの公式バーコードAPI

Barcode APIは、デバイス上であらゆる方向のリアルタイムでバーコードを検出します。また、複数のバーコードを一度に検出できます。

次のバーコード形式を読み取ります。

  • 1Dバーコード:EAN-13、EAN-8、UPC-A、UPC-E、Code-39、Code-93、Code-128、ITF、Codabar
  • 2Dバーコード:QRコード、データマトリックス、PDF-417、AZTEC

次のサポートされている形式のQRコード、データマトリックス、PDF-417、およびAztec値を自動的に解析します。

  • URL
  • 連絡先情報(VCARDなど)
  • カレンダーイベント
  • Eメール
  • 電話
  • SMS
  • ISBN
  • Wi-Fi
  • ジオロケーション(緯度と経度)
  • AAMVA運転免許証/ ID
4
FireZenk

Palaniの回答に従っていて、zxingコアのみをインポートしたい場合。 zxing.androidtestをインポートせずにRGBLuminanceSourceを使用する方法を次に示します。

// import com.google.zxing.client.androidtest.RGBLuminanceSource;
import com.google.zxing.RGBLuminanceSource;

// Bitmap mBitmap; // some bitmap...

int width = mBitmap.getWidth();
int height = mBitmap.getHeight();
int[] pixels = new int[width * height];
mBitmap.getPixels(pixels, 0, width, 0, 0, width, height);

RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);

BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));

try {
   Result result = zxingReader.decode(binaryBitmap);
} catch (Exception e) {
   e.printStackTrace();
}
4
Rui Marques

私自身もこの方法を試しましたが、何よりもうまくいくようでした。

私はいくつかの点を持っていますが

  1. パッケージに含まれ、QRDecoder Activityで使用されるRGBLuminanceSourceクラスに必要なパッケージcom.google.zxing.client.androidtestについて文句を言うので、zxing/androidtestパッケージもインポートします。

  2. パッケージの外にZxingライブラリを追加する場合、パッケージ内でR.Javaファイルが見つからないため、すべてのR.Java参照を編集する必要があります。

例えば:

の代わりに

mRunBenchmarkButton = (Button) findViewById(R.id.benchmark_run);

benchmarkActivity.Javaファイルで

mRunBenchmarkButton = (Button) findViewById(yourpackage.R.id.benchmark_run);

EclipseのDDMSインターフェイスを使用して、QRCodeをデバイスSDCardにプッシュすることもできます。

DDMSを使用

2
Sankalp

https://github.com/dm77/barcodescanner

通常、Google Play Servicesには同じバージョンのデバイスがインストールされている必要があるため、Google Play Servicesよりもこのライブラリの方が好きです。

Zxingに新しいビルドシステムを組み込み、aarを提供します。すごくかっこいい。

0
tbruyelle