ZXingを利用してアンドロイドでQRコードを読み込む


今回、アンドロイドアプリでQRコードを読み込みたいと思い、ネットで検索すると、ヒットする記事はほとんど、ZXingのサイトからライブラリをダウンロードして、ダウンロードしたzipを解凍、そして解凍されたフォルダの中から「core/core.jar」と「javase/javase.jar」の2つのファイルをAndroidプロジェクトの中に作成したlibsフォルダにコピー、、、といった作業が必要のようなのですが、これはおそらくEclipseを使用してアプリを開発している人向けで、AndroidStudioを使用している人はもっと簡単にこのライブラリを使うことができます。

スポンサード・リンク

まず、対象のプロジェクトのbuild.gradle (Module: app) に下記のコードを追加し、Sync Project with Gradle Files を実行します。

repositories {
    jcenter()
}
 
dependencies {
    compile 'com.journeyapps:zxing-android-embedded:3.0.0@aar'
    compile 'com.google.zxing:core:3.2.0'
}

実はこれだけで、このライブラリを使う準備が終わってしまいました。
続いてMainActivity.javaのonCreate メソッドに、

new IntentIntegrator(this).initiateScan(); 

を加えます。全体はこんな感じです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    new IntentIntegrator(this).initiateScan();
}

このまま実行すると下記のような流れになります。
1.アプリ起動と同時にカメラが起動した。
2.QRコードにかざすと自動的に読み取り
3.読み取りが完了すると起動元アクテビティに戻る

また、QRコードの読み取り結果はonActivityResultで結果を受け取ることができます。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d(TAG, "onActivityResult Start");
        Log.d(TAG, "requestCode: " + requestCode + " resultCode: " + resultCode + " data: " + data);
        IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        // null の場合
        if (intentResult == null) {
            Log.d("TAG", "Weird");
            super.onActivityResult(requestCode, resultCode, data);
            return;
        }
 
        if (intentResult.getContents() == null) {
            // 戻るボタンをタップした場合
            Log.d("TAG", "Cancelled Scan");
 
        } else {
            // カメラで読み取った情報をラベルに表示
            Log.d("TAG", "Scanned! "+intentResult.getContents());
        }
    }

コーディング作業は非常に簡単で、数分でQRコード読み取りアプリを作ることができそうです。
ZXingライブラリは非常によくできていると思いますので、みさなんもぜひ使ってみてください。


日本で一番簡単にビットコインが買える取引所 coincheck bitcoin