バーコードスキャナーアプリを使用せずにzxingライブラリを埋め込む[複製
質問
この質問にはすでに答えがあります:
Zxingライブラリを埋め込み、バーコードスキャナーアプリをインストールせずにスキャンを提供するための好ましい方法は何ですか?追加のインストールをユーザーに促すことなく、Androidに埋め込むことを探しています。 (iPhone SRCの仕組みに似ています)。
解決
統合する方が本当に簡単です 意図. 。より信頼性が高く、自動的に更新を取得します。私はそれをアドバイスしませんが...
完全なソースコードはから利用できます zxing 事業。あなたは構築したい core.jar
から core/
そして、それをあなたのAndroidに入れてください lib/
アプリにコアデコーダーを含めるフォルダー。あなたは含めたくありません javase
. 。コードを見ることができます android/
それはバーコードスキャナーのソースであるため、著者として、それをコピーして貼り付けるだけではありません。
そうです Apacheライセンス つまり、ユーザーがライセンス条件に基本的にアクセスできる限り、自由に使用できます。
他のヒント
Android QR/Barcode/Multiformat Decoder。
Zxing APIを使用してAndroidアプリケーションを作成し、アプリケーションにデコードコードのみを埋め込みました。このデコーダーへの入力は、AndroidエミュレータのSDカードを介して与えられました。
ここにステップがあります:
最初に、SDCardとカメラ機能をオンにして、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" />
したがって、これらの上記の手順が完了しています...私たちのアプリケーションの準備ができました。これで、アプリケーションを実行でき、指定した入力画像のデコードされた結果が得られます。
入力を変更するには、コマンドプロンプトの下のコマンドを使用して別のファイルをSDカードに押します
c:\>adb push "c:\image2.png" /sdcard
qrdecoder.javaの入力を変更して、同じものを反映します
Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");
入力は、qrcode、barcodeなどの任意の形式にすることができます。...画像のタイプは、BMP、JPG、またはPNGです。
テスト目的でQRコードを生成するために以下のウェブサイトを使用しました
ありがとう、そして私は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
私自身もこの方法を試しましたが、何よりもうまくいくように見えました。
私はいくつかのポイントを挙げていますが
パッケージcom.google.zxing.client.androidtestについて不平を言います。これは、パッケージにあるrgbluminanceSourceクラスに必要なqrdecoderアクティビティで使用されているため、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よりもこのLIBをGoogle Playサービスよりも好みました。GooglePlayサービスには、デバイスにインストールされているのと同じバージョンが必要です。
Zxingを新しいビルドシステムに埋め込み、AARを提供します。すごくかっこいい。
埋め込もうとしました zxing (xzing)Zbarを発見するまで、しばらくの間。埋め込みの簡単な方法、コードが少なく、簡単な例があります。