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

StackOverflow https://stackoverflow.com/questions/4854442

  •  27-10-2019
  •  | 
  •  

質問

この質問にはすでに答えがあります:

Zxingライブラリを埋め込み、バーコードスキャナーアプリをインストールせずにスキャンを提供するための好ましい方法は何ですか?追加のインストールをユーザーに促すことなく、Androidに埋め込むことを探しています。 (iPhone SRCの仕組みに似ています)。

役に立ちましたか?

解決

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

完全なソースコードはから利用できます zxing 事業。あなたは構築したい core.jar から core/ そして、それをあなたのAndroidに入れてください lib/ アプリにコアデコーダーを含めるフォルダー。あなたは含めたくありません javase. 。コードを見ることができます android/ それはバーコードスキャナーのソースであるため、著者として、それをコピーして貼り付けるだけではありません。

そうです Apacheライセンス つまり、ユーザーがライセンス条件に基本的にアクセスできる限り、自由に使用できます。

他のヒント

Android QR/Barcode/Multiformat Decoder。

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

ここにステップがあります:

  1. 最初に、SDCardとカメラ機能をオンにして、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. したがって、これらの上記の手順が完了しています...私たちのアプリケーションの準備ができました。これで、アプリケーションを実行でき、指定した入力画像のデコードされた結果が得られます。

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

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

qrdecoder.javaの入力を変更して、同じものを反映します

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

入力は、qrcode、barcodeなどの任意の形式にすることができます。...画像のタイプは、BMP、JPG、またはPNGです。

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

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

http://qrcode.kaywa.com

ありがとう、そして私はAndroidとモバイルアプリケーションの開発の初心者であり、私がしたかもしれない間違いを申し訳ありません...

Palaniの回答に従っていて、Zxing Coreのみをインポートする場合。使用方法は次のとおりです 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();
}

使用できます Googleの公式バーコードAPI:

バーコード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

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

私はいくつかのポイントを挙げていますが

  1. パッケージcom.google.zxing.client.androidtestについて不平を言います。これは、パッケージにあるrgbluminanceSourceクラスに必要なqrdecoderアクティビティで使用されているため、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を使用します

https://github.com/dm77/barcodescanner

Google Play ServicesよりもこのLIBをGoogle Playサービスよりも好みました。GooglePlayサービスには、デバイスにインストールされているのと同じバージョンが必要です。

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

埋め込もうとしました zxing (xzing)Zbarを発見するまで、しばらくの間。埋め込みの簡単な方法、コードが少なく、簡単な例があります。

http://sourceforge.net/projects/zbar/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top