SCANNER_INPUT_PLUGIN
現在アクティブなプロファイルで使用されているスキャナ プラグインを有効/無効にするために使用します。スキャナ プラグインを無効にすると、プロファイルがアプリに関連付けられているかどうかに関係なく、そのプロファイルのスキャンは事実上無効になります。この API は、スキャナの実行時ステータスのみを変更し、プロファイルに持続的な変更は加えません。
アクティブなプロファイルでバーコード入力が有効になっているときにのみ機能します。
関数プロトタイプ
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();
};
コメント
このインテントは、現在有効なプロファイルのスキャナ プラグインを有効または無効にします。たとえば、アクティビティ A が起動し、データ キャプチャ API インテントを使用して、スキャナ プラグインが有効になっている ProfileA に切り替えた後、ある時点でデータ キャプチャ API を使用してスキャナ プラグインを無効にします。アクティビティ B が起動します。DataWedge では、ProfileB がアクティビティ B に関連付けられています。DataWedge は ProfileB に切り替わります。アクティビティ A がフォアグラウンドに戻ったときに、onResume
メソッドで、アクティビティ A は、データ キャプチャ API インテントを使用して ProfileA に再度切り替えた後、データ キャプチャ API インテントをもう一度使用してスキャナ プラグインを無効にし、スキャナ プラグインの元の状態に戻す必要があります。
注意事項
上記のシナリオでは、ProfileA がどのアプリケーション/アクティビティにも関連付けられていないことを前提としています。そのため、フォーカスがアクティビティ A に再度切り替わっても、DataWedge は自動的に ProfileA に切り替わりません。したがって、アクティビティ A はその
onResume
メソッドで ProfileA に再度切り替える必要があります。DataWedge は、アクティビティが一時停止すると自動的にプロファイルを切り替えるため、この API 関数をアクティビティのonResume
メソッドから呼び出すことが推奨されます。より迅速な応答を必要とするアプリが、同じアプリ内の複数のアクティビティにわたってバーコード スキャンを無効/有効にする場合は、SUSPEND_PLUGIN および RESUME_PLUGIN を使用することをお勧めします。
この API は、スキャナの実行時ステータスのみを変更し、プロファイルに持続的な変更は加えません。
関連項目:
Zebra Support Central | インテグレータ ガイド、製品マニュアル、ソフトウェア ダウンロードおよびサポート
LaunchPad | Zebra 開発者コミュニティ
インテント | Android 開発者
インテントおよびインテント フィルタ | Android 開発者
Android インテント | チュートリアル