2012年1月15日日曜日

android:バーコードの読み取り

androidアプリでバーコードを読み取るために、ZXingライブラリを使用することもできるが、
QRコードスキャナーというアプリを経由してバーコードを読み取ることもできる。
QRコードスキャナーの呼び出しにはインテントを使用する。

QRコードスキャナーの呼び出し

  • QRコードスキャナーをインテントで呼び出す。
  • QRコードスキャナーが端末にインストールされていなければ、AndroidMarketを起動する。

package net.kuttya.barcodescansample;

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class BarcodeScanSampleActivity extends Activity {
    // インテントリクエストコード
    private static final int REQUEST_SCAN = 0;

    private static String resultStr;
    private TextView textResult;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 読み取り結果表示領域
        textResult = (TextView)findViewById(R.id.result);
    }

    public void clickEventScan(View v) {
        // バーコードスキャナの呼び出し
        callBarcodeScanner();
    }

    private void callBarcodeScanner() {
        Intent intentScan = new Intent("com.google.zxing.client.android.SCAN");

        try {
            startActivityForResult(intentScan, REQUEST_SCAN);
        }
        catch(ActivityNotFoundException e) {
            // バーコードスキャナが端末にインストールされていなければ、
            // AndroidMarketを起動する。
            Uri uri = Uri.parse("market://details?id=com.google.zxing.client.android");

            Intent intentMarket = new Intent(Intent.ACTION_VIEW,uri);

            try {
                startActivity(intentMarket);
            }
            catch(ActivityNotFoundException ee) {
            }
        }
    }

    @Override
    protected void onActivityResult(int request, int result, Intent intent) {
        switch(request) {
            case REQUEST_SCAN:
                if(result == Activity.RESULT_OK) {
                    resultStr = intent.getStringExtra("SCAN_RESULT");
                    textResult.setText(resultStr);
                }
                break;
            default:
                break;
        }
    }
}

  • 直接関係しないがレイアウトは次の通り

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/scan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="clickEventScan"
        android:text="scan start" />

    <TextView
        android:id="@+id/result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

にほんブログ村 IT技術ブログ Androidアプリ開発へ

0 件のコメント:

コメントを投稿