Androidバーコード認識

この記事では、ZXing(Zebra Crossing)を使用して、Androidアプリケーションのバーコードを解読します。



ZXingを使用すると、ライブラリが提供するクラスがこれを処理するため、ユーザーがバーコードスキャナーを持っていないという事実を考慮する必要はありません。 ZXingをアプリケーションに統合することにより、バーコードをスキャンする簡単な機能をユーザーに提供できます。これにより、アプリケーションの主要部分の開発に集中することもできます。



新しいプロジェクトを作成する



ステップ1


Eclipseで、新しいAndroidプロジェクトを作成します。 アプリケーションの名前、プロジェクト、およびパッケージ名を入力します。





ステップ2


メインテンプレートを開きます。 Eclipseは標準テンプレートを作成する必要がありました。 その内部で、既存のコンテンツをボタンに置​​き換えます

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/scan_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="@string/scan" /> </RelativeLayout>
      
      





ボタンの後に、スキャンされた情報の結果を表示する2つのテキストフィールドを追加します。

 <TextView android:id="@+id/scan_format" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textIsSelectable="true" android:layout_centerHorizontal="true" android:layout_below="@id/scan_button" /> <TextView android:id="@+id/scan_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textIsSelectable="true" android:layout_centerHorizontal="true" android:layout_below="@id/scan_format" />
      
      





ボタンにテキストを追加します。 res / values / stringsファイルを開く

 <string name="scan">Scan</string>
      
      





スキャンするには、ユーザーはボタンをクリックする必要があります。 アプリケーションが認識結果を受け取ると、テキストフィールドに表示されます。



ZXingを統合する



ステップ1


ZXingは、Androidでバーコード認識を提供するオープンソースライブラリです。 一部のユーザーはすでにZXingアプリケーションをインストールしているので、コードを渡して結果を待ちます。 このアプリケーションでは、別のアプリケーションの対応する関数を呼び出すメソッドを検討します。 ユーザーがこのアプリケーションを利用できない場合、ダウンロードするための提案が表示されます。



Eclipseで、プロジェクトに新しいパッケージを追加します。 これを行うには、 srcフォルダーを右クリックして[新規]-> [パッケージ]を選択し、パッケージの名前としてcom.google.zxing.integration.androidと入力します。





ステップ2


Eclipseは、既存のコードをプロジェクトにインポートするいくつかの方法を提供します。 この記事で最も簡単な方法は、ZXingのコードを含む2つのクラスを作成することです。 プロジェクトを右クリックして、「新規」->「クラス」を選択し、クラスの名前として「IntentIntegrator」と入力します。 変更できない他のパラメーター。 クラスを作成したら、同じことを行いますが、クラスに「IntentResult」という名前を付けます。





ライブラリの両方のクラスからコードをコピーし、生成されたクラスに貼り付けます。





これで、ファイルをメインクラスに接続できます

 import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult;
      
      





しばらく戻って、次のファイルも接続しましょう。 Eclipseが既にそれらを接続している場合があることに注意してください。

 import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast;
      
      





2つのクラスの内容を調べます。 それらを調べると、コードを読み取っていないことがわかります。 これらの2つのクラスは、スキャン機能へのアクセスを提供する単なるインターフェイスです。



スキャンする



ステップ1


ユーザーがボタンをクリックしたときにスキャンを実装しましょう。 メインアプリケーションファイルにonCreateメソッドがあり、次のようになります。

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
      
      





この関数の前に、ボタンとテンプレートで作成された2つのテキストフィールドを格納する次の変数を作成します

 private Button scanBtn; private TextView formatTxt, contentTxt;
      
      





onCreateの既存のコードの後に​​、変数を初期化する行を追加します

 scanBtn = (Button)findViewById(R.id.scan_button); formatTxt = (TextView)findViewById(R.id.scan_format); contentTxt = (TextView)findViewById(R.id.scan_content);
      
      





次に、クリックハンドラーを追加します

 scanBtn.setOnClickListener(this);
      
      





クラスを拡張して、OnClickListenerインターフェイスを宣言しましょう

 public class MainActivity extends Activity implements OnClickListener
      
      





ステップ2


これで、スキャンプロセスを開始して、ボタンのクリックに応答できます。 onClickメソッドを追加

 public void onClick(View v){ //respond to clicks }
      
      





スキャンボタンが押されたかどうかを確認します。

 if(v.getId()==R.id.scan_button){ //scan }
      
      





条件を持つブロック内で、インポートしたIntentIntegratorクラスのインスタンスを作成します

 IntentIntegrator scanIntegrator = new IntentIntegrator(this);
      
      





では、スキャンを開始するプロシージャを呼び出しましょう

 scanIntegrator.initiateScan();
      
      





現時点では、ユーザーに必要なアプリケーションがインストールされている場合にのみ、認識が開始されます。 そうでない場合は、ダウンロードを開始するように求められます。 スキャン結果がアプリケーションに返されます。

スキャン結果の処理



ステップ1


ボタンを押すとスキャナーが起動します。 次に、スキャンの結果がonActivityResultメソッドに返されます。 コードに追加します。

 public void onActivityResult(int requestCode, int resultCode, Intent intent) { //retrieve scan result }
      
      





関数内で、結果を処理しようとします

 IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
      
      





ステップ2


別のアプリケーションから受信した他のデータと同様に、結果が空でないことを確認することは悪くありません。 正しい結果が得られた場合にのみ続行します

 if (scanningResult != null) { //we have a result }
      
      





スキャン結果を受信しなかった場合(たとえば、ユーザーがスキャンをキャンセルした場合)、メッセージを表示するだけです

 else{ Toast toast = Toast.makeText(getApplicationContext(), "No scan data received!", Toast.LENGTH_SHORT); toast.show(); }
      
      





条件を指定してブロックに戻り、ライブラリから返されたものを把握しましょう。 Intent Resultオブジェクトには、スキャン結果を提供するメソッドがあります。 スキャン結果を文字列として取得します

 String scanContent = scanningResult.getContents();
      
      





また、フォームのバーコードを取得します

 String scanFormat = scanningResult.getFormatName();
      
      





ステップ3


これで、アプリケーションには表示に必要な情報がすべて揃いました。 この記事では、ユーザーに表示するだけです。

 formatTxt.setText("FORMAT: " + scanFormat); contentTxt.setText("CONTENT: " + scanContent);
      
      





エミュレータではなく実際のデバイスでアプリケーションを実行して、バーコード認識機能がどのように機能するかを確認してください。 本やその他のアイテムのバーコードをスキャンしてみてください。



スキャン結果



おわりに



この記事では、ZXingを使用してバーコードをスキャンする方法を学びました。 独自のアプリケーションでは、情報を抽出した後、たとえば、バーコードにURLが含まれている場合はその情報に移動するなど、情報を処理する必要があります。



All Articles