スキャナ入力プラグイン

DataWedge 15.0

SCANNER_INPUT_PLUGIN

現在アクティブなプロファイルがバーコードのスキャンに使用しているバーコード入力プラグインを有効/無効にするために使用します。バーコード入力プラグインを無効にすると、プロファイルがアプリに関連付けられていても、そのプロファイルのスキャンは事実上無効になります。この API は、アクティブなプロファイルでバーコード入力が有効になっている場合にのみ機能します。また、スキャナのランタイム状態にのみ影響し、プロファイルに永続的な変更を加えることはありません。

注: Zebra では、同じアプリ内の異なるアクティビティ間でバーコード スキャンの有効/無効をすばやく切り替える必要があるアプリには、SUSPEND_PLUGIN および RESUME_PLUGIN を使用することを推奨しています。

関数プロトタイプ

Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "<parameter>");

パラメータ

ACTION [String]: "com.symbol.datawedge.api.ACTION"

EXTRA_DATA [String]: "com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN"

<パラメータ>: 文字列としてのパラメータ。次のいずれかを使用します。

  • SUSPEND_PLUGIN - スキャナをサスペンドします。そのため、WAITING 状態または SCANNING 状態から切り替えると、スキャナは一時的に非アクティブになります。SCANNER_STATUS 通知は、IDLE 状態をブロードキャストします。
  • RESUME_PLUGIN - SUSPEND_PLUGIN のサスペンド状態から変更すると、スキャナが再開されます。SCANNER_STATUS 通知は、スキャンが実行されているかどうかに応じて、WAITING 状態と SCANNING 状態を交互にブロードキャストします。WAITING 状態では、ユーザーがトリガを押すなどのアクションが想定されます。SCANNING 状態では、トリガを押すなどのアクションによってスキャンがアクティブに実行されます。
  • ENABLE_PLUGIN - プラグインを有効にすると、スキャナはアクティブになります。SCANNER_STATUS 通知は、スキャンが実行されているかどうかに応じて、WAITING 状態と SCANNING 状態を交互にブロードキャストします。
  • DISABLE_PLUGIN - プラグインを無効にすると、スキャナは非アクティブになります。SCANNER_STATUS 通知は、DISABLED 状態をブロードキャストします。

SUSPEND_PLUGIN/RESUME_PLUGIN の使用: これは、アプリがスキャナをサスペンドまたは一時的に非アクティブにする必要がある場合に便利です。スキャナを (たとえば、プロファイル構成から、あるいは RESUME_PLUGIN または ENABLE_PLUGIN インテント API から) アクティブにすると、SCANNER_STATUS 通知は、スキャンが実行されているかどうかに応じて、WAITING 状態と SCANNING 状態を交互にブロードキャストします。アプリでスキャンをサスペンドする動作は、SCANNING 状態および WAITING 状態のときにのみ実現できます。これらの状態をブロードキャストするときは、SUSPEND_PLUGIN パラメータを使用し、サスペンド状態のままにして、スキャナが使用できない状態を維持します。スキャンがサスペンドされると、SCANNER_STATUS は IDLE 状態をブロードキャストします。スキャナを再度アクティブにするには、RESUME_PLUGIN を使用します。

重要: スキャナの有効化/無効化 API 呼び出しを不必要に使用しないように、REGISTER_FOR_NOTIFICATION API の GET_SCANNER_STATUS API または SCANNER_STATUS を使用して、スキャナ ステータスの変更がアプリに通知されるように登録することをお勧めします。これにより、アプリは、結果を照会して待つことなく、ただちにスキャナ ステータスの変更通知を受信できるようになります。そのため、アプリは、何らかのステータス変更を行う前に、現在のステータスを認識できるようになります。ステータス変更通知には、アクティブなプロファイル名が含まれます。これにより、ステータス変更が関連プロファイルに影響を与える場合にのみ、スキャナの有効化/無効化 API 呼び出しをアプリで使用できるようになります。

結果コード

DataWedge は、アプリにインテント エクストラ (SEND_RESULT および COMMAND_IDENTIFIER) が含まれている場合、次のエラー コードを返し、DataWedge の結果インテント メカニズムを使用してアプリで結果を取得できるようにします。以下のを参照してください。

  • SCANNER_ALREADY_SUSPENDED - すでにサスペンドされているスキャナをサスペンドするインテントを受信しました。
  • PLUGIN_DISABLED - スキャナ プラグインが無効になっているため、サスペンド/再開アクションを実行できません。
  • SCANNER_ALREADY_RESUMED - 再開インテントを受信していますが、スキャナがサスペンド状態ではありません。
  • SCANNER_RESUME_FAILED - スキャナの再開に失敗しました。
  • SCANNER_ALREADY_DISABLED - スキャナは無効な状態にあり、これ以上のアクションは実行できません。
  • DATAWEDGE_DISABLED - DataWedge を無効にするアクションは失敗しました。
  • PARAMETER_INVALID - 無効なパラメータが受信されました。
  • PROFILE_DISABLED - プロファイルを無効にするアクションは失敗しました。
  • SCANNER_ALREADY_DISABLED - すでに無効になっているスキャナを無効にするインテントを受信しました。
  • SCANNER_ALREADY_ENABLED - すでに有効になっているスキャナを有効にするインテントを受信しました。
  • SCANNER_DISABLE_FAILED - スキャナの無効化に失敗しました。
  • SCANNER_ENABLE_FAILED - スキャナを有効にするためのアクションは失敗しました。

詳細については、結果コード ガイドも参照してください。

コード例

サスペンドおよび再開のインテントの送信:

private void suspendScanner() { Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "SUSPEND_PLUGIN"); i.putExtra("SEND_RESULT", "true"); i.putExtra("COMMAND_IDENTIFIER", "MY_SUSPEND_SCANNER"); //Unique identifier this.sendBroadcast(i); } private void resumeScanner() { Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "RESUME_PLUGIN"); i.putExtra("SEND_RESULT", "true"); i.putExtra("COMMAND_IDENTIFIER", "MY_RESUME_SCANNER"); //Unique identifier this.sendBroadcast(i); }

スキャナ入力プラグインの有効化/無効化:

private void enableScanner() { Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "ENABLE_PLUGIN"); i.putExtra("SEND_RESULT", "true"); i.putExtra("COMMAND_IDENTIFIER", "MY_ENABLE_SCANNER"); //Unique identifier this.sendBroadcast(i); } private void disableScanner() { Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "DISABLE_PLUGIN"); i.putExtra("SEND_RESULT", "true"); i.putExtra("COMMAND_IDENTIFIER", "MY_DISABLE_SCANNER"); //Unique identifier this.sendBroadcast(i); }

結果コードの生成と受信

コマンドおよび構成インテント パラメータは、結果コードを送信するかどうかを決定します (デフォルトでは無効)。SEND_RESULT を使用する場合は、結果コードと元のインテントを照合するために、COMMAND_IDENTIFIER を使用します。こうしたパラメータの使用方法のサンプルを以下に示します。

注: 使用する API に合わせて、この汎用コードを変更します

サスペンド/再開コマンド結果の受信:

//call in onResume() method private void registerReceivers() { IntentFilter filter = new IntentFilter(); filter.addAction("com.symbol.datawedge.api.RESULT_ACTION"); filter.addCategory(Intent.CATEGORY_DEFAULT); registerReceiver(receiver, filter); } //call in onPause() method private void unRegisterReceivers() { unregisterReceiver(receiver); } BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //Get result of the suspend/resume API call String action = intent.getAction(); if (action != null && action.equals("com.symbol.datawedge.api.RESULT_ACTION")) { Bundle extras = intent.getExtras(); if (extras != null) { //user specified ID String cmdID = extras.getString("COMMAND_IDENTIFIER"); if ("MY_RESUME_SCANNER".equals(cmdID) || "MY_SUSPEND_SCANNER".equals(cmdID)) { //success or failure String result = extras.getString("RESULT"); //Original command String command = extras.getString("COMMAND"); if ("FAILURE".equals(result)) { Bundle info = extras.getBundle("RESULT_INFO"); String errorCode = ""; if (info != null) { errorCode = info.getString("RESULT_CODE"); } Log.d(TAG, " Command:" + command + ":" + cmdID + ":" + result + ",Code:" + errorCode); } else { Log.d(TAG, " Command:" + command + ":" + cmdID + ":" + result); } } } } } };

プラグインの有効化/無効化結果の受信:

// send the intent Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); // Use "ENABLE_PLUGIN" or "DISABLE_PLUGIN" i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "ENABLE_PLUGIN"); // request and identify the result code i.putExtra("SEND_RESULT","true"); i.putExtra("COMMAND_IDENTIFIER","123456789"); this.sendBroadcast(i); // register to receive the result public void onReceive(Context context, Intent intent){ String command = intent.getStringExtra("COMMAND"); String commandidentifier = intent.getStringExtra("COMMAND_IDENTIFIER"); String result = intent.getStringExtra("RESULT"); Bundle bundle = new Bundle(); String resultInfo = ""; if(intent.hasExtra("RESULT_INFO")){ bundle = intent.getBundleExtra("RESULT_INFO"); Set<String> keys = bundle.keySet(); for (String key: keys) { resultInfo += key + ": "+bundle.getString(key) + "\n"; } } String text = "Command: "+command+"\n" + "Result: " +result+"\n" + "Result Info: " +resultInfo + "\n" + "CID:"+commandidentifier; Toast.makeText(context, text, Toast.LENGTH_LONG).show(); };

関連項目:

Zebra Support Central | インテグレータ ガイド、製品マニュアル、ソフトウェア ダウンロードおよびサポート

LaunchPad | Zebra 開発者コミュニティ

インテント | Android 開発者

インテントおよびインテント フィルタ | Android 開発者

Android インテント | チュートリアル