「バーコード強調」プログラマ ガイド

DataWedge 11.3

概要

このガイドでは、バーコード強調機能を使用するアプリの作成方法を説明します。[バーコード スキャン] モードから [Barcode Highlighting] モードに切り替える機能が含まれており、バーコード強調機能を使用して、指定された色でさまざまなタイプのバーコードを強調表示する方法を示します。


説明

この例では、バーコード強調機能を使用して、さまざまなフレーバーのアイスクリームのボックスを区別するためのアプリを作成します。各ボックスには 1 つのフレーバーが含まれており、各フレーバーのバーコードは文字列を共有します。ボックスのバーコードがスキャンされると、定義されたルールに基づいて、指定された色で強調表示されます。

  • ストロベリー味のボックスには、テキスト「090986」のバーコードがあります。そのバーコードはピンク色で強調表示されます。
  • チョコレート味のボックスには、テキスト「7777」のバーコードがあります。そのバーコードは茶色で強調表示されます。
  • その他のバーコードは緑色で強調表示されます。

DataWedge の SWITCH_DATACAPTURE API を使用してバーコード スキャンとバーコード強調を切り替え、次のアクションを実行します。

  • [標準] ボタンをタップして、[バーコード スキャン] モードに切り替えます (強調表示なし)。
  • [Highlight] ボタンをタップして、[Barcode Highlighting] モードに切り替えます。

アプリのメイン画面

ソース コードのファイルをダウンロードします。


要件


前提条件

指定されたルールに基づいてバーコード強調をテストするには、以下のようにバーコードを作成します。

  • ストロベリー味のアイスクリームのボックスを表すテキスト「090986」を含むバーコードを作成します。
  • チョコレート味のアイスクリームのボックスを表すテキスト「7777」を含むバーコードを作成します。

バーコードの強調表示

要約すると、このバーコードを強調表示するサンプル アプリを作成する手順は次のとおりです。

  1. UI を作成します
  2. DataWedge プロファイルを作成します
  3. ステータス通知を受信するブロードキャスト レシーバを登録します
  4. [Switch to Barcode Highlighting] モードを追加します
  5. [Switch to Barcode Scanning] モードを追加します

これらの手順の詳細について、次のサブセクションで説明します。

1.UI を作成します

Android アプリケーションを作成します。UI に次の要素を追加します。

  • 標準の [バーコード スキャン] モードに切り替えるボタン ([標準] ボタン)
  • [Barcode Highlighting] モードに切り替えるボタン ([Highlight] ボタン)
  • スキャナのステータスとバーコード強調のステータスを表示する [TextView]
  • スキャンしたデータを表示する [EditText]

アプリのメイン画面

2.DataWedge プロファイルを作成します

DataWedge でプロファイルを作成し、そのプロファイルをアプリに関連付けます。

     

3.ステータス通知を受信するブロードキャスト レシーバを登録します

スキャナ ステータスおよびワークフロー ステータスの通知をリッスンするために、ブロードキャスト受信者を登録します。これには、バーコード強調の通知が含まれます。

public class MainActivity extends AppCompatActivity {

    TextView txtStatus = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtStatus = findViewById(R.id.txtStatus);
        registerReceivers();
        registerUnregisterForNotifications(true, "WORKFLOW_STATUS");
        registerUnregisterForNotifications(true, "SCANNER_STATUS");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        registerUnregisterForNotifications(false, "WORKFLOW_STATUS");
        registerUnregisterForNotifications(false, "SCANNER_STATUS");
        unregisterReceivers();
    }

    private void registerReceivers() {
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.symbol.datawedge.api.NOTIFICATION_ACTION");
        filter.addAction("com.symbol.datawedge.api.RESULT_ACTION");
        filter.addCategory(Intent.CATEGORY_DEFAULT);
        registerReceiver(broadcastReceiver, filter);
    }

    private void unregisterReceivers() {

        unregisterReceiver(broadcastReceiver);
    }

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals("com.symbol.datawedge.api.NOTIFICATION_ACTION")) {

                if (intent.hasExtra("com.symbol.datawedge.api.NOTIFICATION")) {
                    Bundle b = intent.getBundleExtra("com.symbol.datawedge.api.NOTIFICATION");
                    String NOTIFICATION_TYPE = b.getString("NOTIFICATION_TYPE");
                    if (NOTIFICATION_TYPE != null) {
                        switch (NOTIFICATION_TYPE) {
                            case "WORKFLOW_STATUS":
                            case "SCANNER_STATUS":

                                String status = b.getString("STATUS");
                                txtStatus.setText("Status: " + status);
                                break;
                        }
                    }
                }
            }
        }
    };

    void registerUnregisterForNotifications(boolean register, String type) {
        Bundle b = new Bundle();
        b.putString("com.symbol.datawedge.api.APPLICATION_NAME", getPackageName());
        b.putString("com.symbol.datawedge.api.NOTIFICATION_TYPE", type);
        Intent i = new Intent();
        i.putExtra("APPLICATION_PACKAGE", getPackageName());
        i.setAction("com.symbol.datawedge.api.ACTION");
        i.setPackage("com.symbol.datawedge");
        if (register)
            i.putExtra("com.symbol.datawedge.api.REGISTER_FOR_NOTIFICATION", b);
        else
            i.putExtra("com.symbol.datawedge.api.UNREGISTER_FOR_NOTIFICATION", b);
        this.sendBroadcast(i);
    }
}

受信したステータスは、UI の一部として [Status TextView] に表示されます。

4.[Switch to Barcode Highlighting] モードを追加します

[Highlight] ボタンのクリック イベントを実装します。コードで、次の手順を実行します:

  • SWITCH_DATACAPTURE API を使用して、バーコード強調を有効にします。
  • 「Rule1」という名前の新しいルールを作成して、テキスト「090986」が含まれているバーコードをピンク色 (#CEF04E6E) で強調表示します。
  • 「Rule2」という名前の新しいルールを作成して、テキスト「7777」が含まれているバーコードを茶色 (#CEF04E6E) で強調表示します。
  • インテントで送信するルール リストに「Rule1」と「Rule2」を追加します。
  • そのルール リストを「barcode_overlay」パラメータに割り当てます。
  • インテントをブロードキャストします。
public void onClickHighlight(View view) { //DataWedge アクションおよび SWITCH_DATACAPTURE API パラメータを指定 Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("APPLICATION_PACKAGE", getPackageName()); i.setPackage("com.symbol.datawedge"); i.putExtra("SEND_RESULT", "LAST_RESULT"); i.putExtra("com.symbol.datawedge.api.SWITCH_DATACAPTURE", "BARCODE"); Bundle paramList = new Bundle(); //使用するスキャナを指定 (現時点では内蔵のイメージャおよびカメラのみサポート) paramList.putString("scanner_selection_by_identifier", "INTERNAL_IMAGER"); //バーコード強調を有効化  paramList.putString("barcode_highlighting_enabled", "true"); //バーコード強調の「Rule 1」を作成 [開始] Bundle rule1 = new Bundle(); rule1.putString("rule_name", "Rule1"); Bundle rule1Criteria = new Bundle(); //criteria (条件) を設定。contains パラメータを指定します。Bundle bundleContains1 = new Bundle(); bundleContains1.putString("criteria_key", "contains"); bundleContains1.putString("criteria_value", "090986"); //Container は identifier グループの唯一のパラメータ。// 他に ignore case、min length、max length などのパラメータがある ArrayListidentifierParamList = new ArrayList<>(); identifierParamList.add(bundleContains1); //"identifier" グループのパラメータを ParcelableArrayList として criteria リストに追加 rule1Criteria.putParcelableArrayList("identifier", identifierParamList); //Rule バンドルに criteria を追加 rule1.putBundle("criteria", rule1Criteria); //強調表示する色を指定することでアクション バンドルをセットアップ Bundle bundleFillColor = new Bundle(); bundleFillColor.putString("action_key", "fillcolor"); bundleFillColor.putString("action_value", "#CEF04E6E"); ArrayListrule1Actions = new ArrayList<>(); rule1Actions.add(bundleFillColor); rule1.putParcelableArrayList("actions", rule1Actions); //バーコード強調の「Rule 1」を作成 [終了] //バーコード強調の「Rule 2」を作成 [開始] Bundle rule2 = new Bundle(); rule2.putString("rule_name", "Rule2"); Bundle rule2Criteria = new Bundle(); Bundle bundleContains2 = new Bundle(); bundleContains2.putString("criteria_key", "contains"); bundleContains2.putString("criteria_value", "7777"); ArrayListidentifierParamList2 = new ArrayList<>(); identifierParamList2.add(bundleContains2); rule2Criteria.putParcelableArrayList("identifier", identifierParamList2); rule2.putBundle("criteria", rule2Criteria); Bundle rule2BundleStrokeColor = new Bundle(); rule2BundleStrokeColor.putString("action_key", "fillcolor"); rule2BundleStrokeColor.putString("action_value", "#CE7F2714"); ArrayListrule2Actions = new ArrayList<>(); rule2Actions.add(rule2BundleStrokeColor); rule2.putParcelableArrayList("actions", rule2Actions); //バーコード強調の「Rule 1」を作成 [終了] //作成した 2 つのルールをルール リストに追加 ArrayListruleList = new ArrayList<>(); ruleList.add(rule1); ruleList.add(rule2); //そのルール リストを barcode_overlay パラメータに割り当て Bundle ruleBundlebarcodeOverlay = new Bundle(); ruleBundlebarcodeOverlay.putString("rule_param_id", "barcode_overlay"); ruleBundlebarcodeOverlay.putParcelableArrayList("rule_list", ruleList); ArrayListruleParamList = new ArrayList<>(); ruleParamList.add(ruleBundlebarcodeOverlay); paramList.putParcelableArrayList("rules", ruleParamList); i.putExtra("PARAM_LIST", paramList); sendBroadcast(i); }

[Highlight] ボタンをタップして、SESSION_STARTED 状態になってからトリガを押してスキャンします。ステータスは次のように変化します。PLUGIN_READY > WORKFLOW_READY > WORKFLOW_ENABLED > SESSION_STARTED

セッション開始ステータス

ステータスが SESSION_STARTED に変更されたら、トリガを押してバーコードの強調表示が動作していることを確認します。バーコードは、フレーバーに応じて異なる色で強調表示されます。

  • イチゴ味のアイスクリームのボックスにあるバーコードは、ピンク色で強調表示されます。
  • チョコレート味のアイスクリームのボックスにあるバーコードは、茶色で強調表示されます。
  • スキャンした結果定義されたルールに適合しないバーコードは、緑色で強調表示されます。

バーコードが強調表示される

5.[Switch to Barcode Scanning] モードを追加します

[標準] ボタンのクリック イベントを実装して、[バーコード スキャン] モードに切り替えます (バーコードの強調表示を無効にします)。コードで、次の手順を実行します:

  • SWITCH_DATACAPTURE API を使用して、バーコード強調を無効にします。
public void onClickRegular(View view) { //DataWedge アクションおよび SWITCH_DATACAPTURE API パラメータを指定 Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("APPLICATION_PACKAGE", getPackageName()); i.setPackage("com.symbol.datawedge"); i.putExtra("SEND_RESULT", "LAST_RESULT"); i.putExtra("com.symbol.datawedge.api.SWITCH_DATACAPTURE", "BARCODE"); Bundle paramList = new Bundle(); //使用するスキャナを指定 (現時点では内蔵のイメージャおよびカメラのみサポート) paramList.putString("scanner_selection_by_identifier", "INTERNAL_IMAGER"); //バーコード強調を無効化 paramList.putString("barcode_highlighting_enabled", "false"); i.putExtra("PARAM_LIST", paramList); sendBroadcast(i); }



関連ガイド: