概要
このガイドでは、バーコード強調機能を使用するアプリの作成方法を説明します。[バーコード スキャン] モードから [Barcode Highlighting] モードに切り替える機能が含まれており、バーコード強調機能を使用して、指定された色でさまざまなタイプのバーコードを強調表示する方法を示します。
説明
この例では、バーコード強調機能を使用して、さまざまなフレーバーのアイスクリームのボックスを区別するためのアプリを作成します。各ボックスには 1 つのフレーバーが含まれており、各フレーバーのバーコードは文字列を共有します。ボックスのバーコードがスキャンされると、定義されたルールに基づいて、指定された色で強調表示されます。
- ストロベリー味のボックスには、テキスト「090986」のバーコードがあります。そのバーコードはピンク色で強調表示されます。
- チョコレート味のボックスには、テキスト「7777」のバーコードがあります。そのバーコードは茶色で強調表示されます。
- その他のバーコードは緑色で強調表示されます。
DataWedge の SWITCH_DATACAPTURE API を使用してバーコード スキャンとバーコード強調を切り替え、次のアクションを実行します。
- [標準] ボタンをタップして、[バーコード スキャン] モードに切り替えます (強調表示なし)。
- [Highlight] ボタンをタップして、[Barcode Highlighting] モードに切り替えます。
アプリのメイン画面
ソース コードのファイルをダウンロードします。
要件
前提条件
指定されたルールに基づいてバーコード強調をテストするには、以下のようにバーコードを作成します。
- ストロベリー味のアイスクリームのボックスを表すテキスト「090986」を含むバーコードを作成します。
- チョコレート味のアイスクリームのボックスを表すテキスト「7777」を含むバーコードを作成します。
バーコードの強調表示
要約すると、このバーコードを強調表示するサンプル アプリを作成する手順は次のとおりです。
- UI を作成します
- DataWedge プロファイルを作成します
- ステータス通知を受信するブロードキャスト レシーバを登録します
- [Switch to Barcode Highlighting] モードを追加します
- [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"); ArrayList rule1Actions = 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"); ArrayList identifierParamList2 = 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"); ArrayList rule2Actions = new ArrayList<>(); rule2Actions.add(rule2BundleStrokeColor); rule2.putParcelableArrayList("actions", rule2Actions); //バーコード強調の「Rule 1」を作成 [終了] //作成した 2 つのルールをルール リストに追加 ArrayList ruleList = 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); ArrayList ruleParamList = 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); }
関連ガイド: