SOFT_SCAN_TRIGGER
ソフトウェア スキャン トリガの開始、停止、または切り替えに使用します。
アクティブなプロファイルでバーコード入力が有効になっているときにのみ機能します。
関数プロトタイプ
単一のスキャナの場合:
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_SCANNING
とSTOP_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 API の SCANNER_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();
};
マルチスキャナ モード
マルチ スキャナ モードの場合、インテント エクストラ「scanner_selection_by_identifier」とともに使用される特定のスキャナを含めるには、ソフト スキャン トリガ インテントが必要です。
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);
関連項目:
Zebra Support Central | インテグレータ ガイド、製品マニュアル、ソフトウェア ダウンロードおよびサポート
LaunchPad | Zebra 開発者コミュニティ
インテント | Android 開発者
インテントおよびインテント フィルタ | Android 開発者
Android インテント | チュートリアル