软扫描触发器

DataWedge 7.4

SOFT_SCAN_TRIGGER

用于启动、停止或切换软件扫描触发器。

仅当在活动配置文件中启用条码输入时才正常运行

函数原型

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

参数

ACTION [字符串]:"com.symbol.datawedge.api.ACTION"

EXTRA_DATA [字符串]:"com.symbol.datawedge.api.SOFT_SCAN_TRIGGER"

<参数>:该参数采用字符串形式,使用以下任何一项:

  • START_SCANNING - 触发时开始扫描

  • STOP_SCANNING - 触发时停止或中断扫描

  • TOGGLE_SCANNING - 触发时在 START_SCANNINGSTOP_SCANNING 之间切换

结果代码

如果应用程序包括 Intent 额外项 RECEIVE_RESULTCOMMAND_IDENTIFIER 以使应用程序能够使用 DataWedge 结果 Intent 机制获取结果,则 DataWedge 返回以下错误代码。请参阅以下示例

  • DATAWEDGE_DISABLED - FAILURE
  • INPUT_NOT_ENABLED - FAILURE
  • PARAMETER_INVALID - FAILURE
  • PROFILE_DISABLED - FAILURE

有关更多信息,另请参阅结果代码指南

返回值

将错误和调试消息记录到可通过 logcat 命令查看和过滤的 Android 日志记录系统。从 ADB Shell 使用 logcat 查看日志消息:

$ adb logcat -s DWAPI

记录无效操作和参数的错误消息。

示例代码

// 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”通知

如果在执行命令时扫描器处于忙碌状态,则可能会忽略软扫描触发器命令。Zebra 建议使用 SCANNER_STATUS NOTIFICATION API 参数以指示该扫描器已就绪。使用下面的示例代码:

@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);

注意:虽然针对此目的通常很有效,但延迟代码可在设备之间工作不一致。

生成和接收结果

命令和配置 Intent 参数决定是否发送结果代码(默认情况下处于禁用状态)。使用 SEND_RESULT 时,COMMAND_IDENTIFIER 用于将结果代码与起源 Intent 进行匹配。这些参数的示例用法如下所示。

注意:修改此通用代码以与要使用的 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 支持中心 | 集成商指南、产品手册、软件下载和支持

LaunchPad | Zebra 开发人员社区

Intent | Android 开发人员

Intent 和 Intent 过滤器 | Android 开发人员

Android Intent | 教程