ソフト スキャン トリガ

DataWedge 15.0

SOFT_SCAN_TRIGGER

ソフトウェア スキャン トリガの開始、停止、または切り替えに使用します。この API は、アクティブなプロファイルでバーコード入力が有効になっているときにのみ機能します。ソフト スキャン トリガ コマンドの実行は、スキャナが既存のタスクを完了してから別のタスクを実行するように要求されるまで、十分に遅らせる必要があります。ソフト スキャン トリガ コマンドは、コマンド実行時にスキャナがビジー状態の場合は無視されることがあります。NOTIFICATION API SCANNER_STATUS パラメータを使用して、スキャナの準備ができたことを通知することをお勧めします

関数プロトタイプ

単一のスキャナの場合:

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

複数スキャナのサポートの場合、使用するスキャナを示すエクストラ scanner_selection_by_identifier を SOFT_SCAN_TRIGGER インテントに含める必要があります。

Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("scanner_selection_by_identifier", "BLUETOOTH_RS6000"); i.putExtra("com.symbol.datawedge.api.SOFT_SCAN_TRIGGER", "TOGGLE_SCANNING"); sendBroadcast(i);

パラメータ

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

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

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

  • START_SCANNING - トリガされたときにスキャンを開始

  • STOP_SCANNING - トリガされたときにスキャンを停止または中断

  • TOGGLE_SCANNING - トリガされたときに START_SCANNINGSTOP_SCANNING を切り替え

結果コード

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

  • DATAWEDGE_DISABLED - エラー
  • INPUT_NOT_ENABLED - エラー
  • PARAMETER_INVALID - エラー
  • PROFILE_DISABLED - エラー

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

コード例

// define action and data strings String softScanTrigger = "com.symbol.datawedge.api.ACTION"; String extraData = "com.symbol.datawedge.api.SOFT_SCAN_TRIGGER"; // create the intent Intent i = new Intent(); // set the action to perform i.setAction(softScanTrigger); // add additional info i.putExtra(extraData, "START_SCANNING"); // send the intent to DataWedge this.sendBroadcast(i);

サンプルの「SCANNER_STATUS」通知

NOTIFICATION APISCANNER_STATUS パラメータを使用して、スキャナの準備ができたことを通知するサンプルコード

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); registerReceivers(); } @Override protected void onResume(){ super.onResume(); switchToProfile(); } public static final String ACTION = "com.symbol.datawedge.api.ACTION"; public static final String NOTIFICATION_ACTION = "com.symbol.datawedge.api.NOTIFICATION_ACTION"; public static final String NOTIFICATION_TYPE_SCANNER_STATUS = "SCANNER_STATUS"; public static final String SCAN_STATUS_WAITING = "WAITING"; public static final String NOTIFICATION_TYPE_PROFILE_SWITCH = "PROFILE_SWITCH"; public static final String ACTION_EXTRA_REGISTER_FOR_NOTIFICATION = "com.symbol.datawedge.api.REGISTER_FOR_NOTIFICATION"; public static final String ACTION_EXTRA_UNREGISTER_FOR_NOTIFICATION = "com.symbol.datawedge.api.UNREGISTER_FOR_NOTIFICATION"; private void registerReceivers() { IntentFilter filter = new IntentFilter(); filter.addAction(NOTIFICATION_ACTION); registerReceiver(broadcastReceiver, filter); registerForScannerStatus(); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(broadcastReceiver); unRegisterForScannerStatus(); } private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.d(TAG, "#DataWedge-APP# Action: " + action); if(action.equals(NOTIFICATION_ACTION)){ // handle notification 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 NOTIFICATION_TYPE_SCANNER_STATUS: Log.d(TAG, "SCANNER_STATUS: status: " + b.getString("STATUS") + ", profileName: " + b.getString("PROFILE_NAME")); String status = b.getString("STATUS"); if(status!=null && status.equals(SCAN_STATUS_WAITING)){ //toggle scanner when scanner is ready scanToggle(); unRegisterForScannerStatus(); } break; case NOTIFICATION_TYPE_PROFILE_SWITCH: Log.d(TAG, "PROFILE_SWITCH: profileName: " + b.getString("PROFILE_NAME") + ", profileEnabled: " + b.getBoolean("PROFILE_ENABLED")); break; } } } } } }; public void registerForScannerStatus() { Bundle b = new Bundle(); b.putString("com.symbol.datawedge.api.APPLICATION_NAME", "com.dwapi.dwnotifiation"); b.putString("com.symbol.datawedge.api.NOTIFICATION_TYPE", NOTIFICATION_TYPE_SCANNER_STATUS); Intent i = new Intent(); i.setAction(ACTION); i.putExtra(ACTION_EXTRA_REGISTER_FOR_NOTIFICATION, b); this.sendBroadcast(i); } public void unRegisterForScannerStatus() { Bundle b = new Bundle(); b.putString("com.symbol.datawedge.api.APPLICATION_NAME", "com.dwapi.dwnotifiation"); b.putString("com.symbol.datawedge.api.NOTIFICATION_TYPE", NOTIFICATION_TYPE_SCANNER_STATUS); Intent i = new Intent(); i.setAction(ACTION); i.putExtra(ACTION_EXTRA_UNREGISTER_FOR_NOTIFICATION, b); this.sendBroadcast(i); } public void switchToProfile(){ Intent i = new Intent(); i.setAction(ACTION); i.putExtra("com.symbol.datawedge.api.SWITCH_TO_PROFILE","Launcher"); this.sendBroadcast(i); } public void scanToggle(){ Intent i = new Intent(); i.setAction(ACTION); i.putExtra("com.symbol.datawedge.api.SOFT_SCAN_TRIGGER","TOGGLE_SCANNING"); this.sendBroadcast(i); }

遅延コード

ソフト スキャン トリガー コマンドがタスクを完了してから次のタスクを実行できるように、遅延を使用する方法を示すサンプル コード。

// SAMPLE DELAY CODE int triggerDelay = 250; // delay in milliseconds Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { // for clarity, assume the following method contains the code in the example above startSoftScan(); } }, triggerDelay);

: 一般に、このサンプル遅延コードは、この目的に有効ですが、デバイスによって動作が一貫しないことがあります。

結果の生成および受信

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

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

// send the intent Intent i = new Intent(); i.setAction(ACTION); i.putExtra("com.symbol.datawedge.api.CREATE_PROFILE", "Profile1"); // 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 インテント | チュートリアル