ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

android-lib-ZXingCaptureActivity 2.3.0-1.2 をリリースしました

android-lib-ZXingCaptureActivity という Android アプリ用のライブラリを公開しました *1AAR でパッケージングして、Maven Central に publish してあります。

ソースコードGitHub に置いてあります。

android-lib-ZXingCaptureActivity でできること

このライブラリを使うと、バーコードスキャンの機能を持つ Activity をあなたのアプリに簡単に組み込むことができます。 次のスクリーンショットのような感じです。

f:id:nobuoka:20140223143508p:plain

バーコードスキャンの機能自体は、ZXing の core モジュールにより実現されます。 (なので、このライブラリは com.google.zxing:core に依存します。) 本ライブラリが提供するのは、Activity の実装と、カメラの管理などの部分です。 本ライブラリの実装の多くの部分は、ZXing の android モジュールを元に作られています。

ZXing プロジェクトについては次をご覧ください。

備考

バーコードスキャンの機能があなたのアプリのコア機能であるならば、本ライブラリを使うなどして、アプリの中にバーコードスキャンの機能を組み込むべきでしょう。 一方で、バーコードスキャンの機能がコア機能でないのであれば、バーコードスキャンは 「QRコードスキャナー」 などの別のアプリにインテントを投げることで実現する、というのも一つの手段でしょう。 「QRコードスキャナー」 にインテントを投げるのであれば、ZXing プロジェクトの android-integration モジュールを使うのが便利です。

使い方

依存関係の追加

Maven Central に公開されているので、build.gradle に次のように依存関係を追加することでライブラリを使用できます (Gradle によるビルドを行う場合)。

repositories {
    mavenCentral()
}
dependencies {
    compile 'info.vividcode.android.zxing:capture-activity:2.3.0-1.+'
}

Maven でのビルドや Ant でのビルドを行う場合も、それぞれのやり方で依存関係に追加すれば使えると思います。 (試してません。)

AndroidManifest.xml での activity の宣言

このライブラリが提供する activity は info.vividcode.android.zxing.CaptureActivity です。 これを使うことを AndroidManifest.xml で宣言します。 (必要ならば、CaptureActivity のサブクラスを作ってそれを使うようにもできます。)

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.example.your.app.pkg">
    <application>
        <activity android:name="info.vividcode.android.zxing.CaptureActivity"
            android:theme="@style/Theme.ZXingCaptureActivity"
            android:screenOrientation="landscape"/>

テーマは自由に指定することができます。 本ライブラリでは、Theme.ZXingCaptureActivity というテーマを提供しています。 それと、android:screenOrientation は必ず landscape と指定してください。

Activity の起動と結果の取得

あとは、実際に Activity を起動して、結果を受け取るだけです。 Activity の起動は、次のように Activity#startActivityForResult メソッド を使って行います。

// 必要な import 文
import android.content.Intent;
import info.vividcode.android.zxing.CaptureActivity;
import info.vividcode.android.zxing.CaptureActivityIntents;

  // Intent の作成。
  Intent captureIntent = new Intent(this, CaptureActivity.class);
  // `CaptureActivityIntents` クラスを使ってインテントにパラメータをセットできます。
  // (必須のパラメータはありません。)
  // 例えば、`setPromptMessage` メソッドを使い、`CaptureActivity` に表示されるメッセージを設定できます。
  CaptureActivityIntents.setPromptMessage(captureIntent, "Barcode scanning...");
  // Activity の開始。
  startActivityForResult(captureIntent, 1);

結果は、Activity#onActivityResult コールバックメソッド で受け取ります。 結果のデータは CaptureResult クラスで扱うと良いでしょう。

// 必要な import 文
import android.content.Intent;
import android.widget.Toast;
import info.vividcode.android.zxing.CaptureResult;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == 1) {
    if(resultCode == RESULT_OK) {
      CaptureResult res = CaptureResult.parseResultIntent(data);
      // バーコードから読み取った値と、バーコードのフォーマットを Toast で表示する。
      Toast.makeText(this, res.getContents() + " (" + res.getFormatName() + ")", Toast.LENGTH_LONG).show();
    } else {
      // 「戻る」 ボタンが押されたときなどはこっちに来る。
    }
  }
}

ライセンス

本ライブラリのライセンスは Apache License, Version 2.0 です。 また、本ライブラリには Apache License, Version 2.0 でライセンスされている成果物 (ZXing プロジェクトの android モジュール) の派生成果物が含まれています。

*1:しばらく前から Maven Central にバージョン 2.3.0-1 や 2.3.0-1.1 を上げていましたが、告知するのは今回が初めてです。