Zxingライブラリを埋め込み、バーコードスキャナーアプリをインストールせずにスキャンを提供するための推奨される方法は何ですか?私はAndroidに追加のインストールをユーザーに要求することなく、Android $ ===に埋め込みたいと考えています。(iPhone srcの動作に似ています)。
Intent で統合するのは本当に簡単です。より信頼性が高く、更新が自動的に取得されます。アドバイスはしませんが...
完全なソースコードは ZXing プロジェクトから入手できます。 core.jar
からcore/
をビルドし、それをAndroid lib/
]フォルダーに入れて、アプリにコアデコーダーを含めます。 include javase
。バーコードスキャナーのソースであるAndroid/
のコードを見ることができますが、著者としては、コピーして貼り付けるだけではないことをお勧めします。
Apache licensed です。これは、ユーザーにライセンス条項へのアクセス権を本質的に付与する限り、自由に使用できることを意味します。
Android QR /バーコード/マルチフォーマットデコーダー。
ZXing APIを使用してAndroidアプリケーションを作成し、アプリケーションにデコードコードのみを埋め込みました。このデコーダーへの入力は、AndroidエミュレーターのSDカードを介して与えられました。
手順は次のとおりです。
まず、SDカードとカメラの機能をオンにして、Eclipse IDEでAVD(エミュレータ)バージョン4を作成しました。
次に、コマンドプロンプトで以下のコマンドを使用してSDCardを作成しました。
c:\>mksdcard 40M mysdcard.iso
40Mは作成したSDカードのサイズです。これはC:ドライブに保存されます。 .iso部分が重要であることに注意してください。
次に、コマンドプロンプトで以下のコマンドを使用して、SDカードをエミュレーターにマウントする必要があります。
c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
ここで、myavd4は、ステップ1で作成したエミュレーター/ Android仮想デバイスの名前です。avd名の前の「@」記号も重要です。
エミュレータを常に実行し続けます。閉じられた場合は、上記の3つの手順をやり直す必要があります。
コマンドプロンプトで以下のコマンドを使用して、エミュレータにマウントされたこのSDカードに、持っているQRコードまたは他のコードイメージをプッシュできます。
c:\>adb Push "c:\myqrcode.png" /sdcard
次に、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);
}
}
次に、以下のリンクからZXingソースコード(ZXing-1.6.Zip)をダウンロードしました。
http://code.google.com/p/zxing/downloads/list
次に、これを抽出し、D:\ zxing-1.6\core\src\comに移動します
comフォルダーをコピーして、Eclipseのパッケージに貼り付けます。
(注、プロジェクトのパッケージを右クリックして貼り付けます...既存のフォルダーを置き換えるように求められたら、はいを選択します)
次に、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>
次に、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>
次に、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>
次に、開始タグの後にマニフェストファイルで以下のコードをコピーして貼り付けます
<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" />
これで、上記の手順が完了しました...アプリケーションの準備が整いました。これで、uはアプリケーションを実行でき、指定した入力画像のデコード結果をuで取得できます。
入力を変更するには、コマンドプロンプトで次のコマンドを使用して別のファイルをSDカードにプッシュします
c:\>adb Push "c:\image2.png" /sdcard
qRDecoder.Javaの入力を変更して同じものを反映する
Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");
入力は、QRCode、バーコードなどの任意の形式にすることができます。画像のタイプは、bmp、jpg、またはpngにすることができます。
テスト目的でQRコードを生成するために以下のWebサイトを使用しました
おかげで、私はAndroidおよびモバイルアプリケーション開発の初心者であり、間違いをおかけして申し訳ありません。
現在 を使用できます 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
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();
}
私自身もこの方法を試しましたが、何よりもうまくいくようでした。
私はいくつかの点を持っていますが
パッケージに含まれ、QRDecoder Activityで使用されるRGBLuminanceSourceクラスに必要なパッケージcom.google.zxing.client.androidtestについて文句を言うので、zxing/androidtestパッケージもインポートします。
パッケージの外に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にプッシュすることもできます。
https://github.com/dm77/barcodescanner
通常、Google Play Servicesには同じバージョンのデバイスがインストールされている必要があるため、Google Play Servicesよりもこのライブラリの方が好きです。
Zxingに新しいビルドシステムを組み込み、aarを提供します。すごくかっこいい。