问题描述
我正在尝试为 Zebra 手持式 rfid 阅读器开发一个小型应用程序,但找不到访问标签 MemoryBank 的方法。我的阅读器配置如下:
private void ConfigureReader() {
if (reader.isConnected()) {
TriggerInfo triggerInfo = new TriggerInfo();
triggerInfo.StartTrigger.setTriggerType(START_TRIGGER_TYPE.START_TRIGGER_TYPE_IMMEDIATE);
triggerInfo.StopTrigger.setTriggerType(STOP_TRIGGER_TYPE.STOP_TRIGGER_TYPE_IMMEDIATE);
try {
// receive events from reader
if (eventHandler == null){
eventHandler = new EventHandler();
}
reader.Events.addEventsListener(eventHandler);
// HH event
reader.Events.setHandheldEvent(true);
// tag event with tag data
reader.Events.setTagReadEvent(true);
reader.Events.setAttachTagDataWithReadEvent(true);
// set trigger mode as rfid so scanner beam will not come
reader.Config.setTriggerMode(ENUM_TRIGGER_MODE.RFID_MODE,true);
// set start and stop triggers
reader.Config.setStartTrigger(triggerInfo.StartTrigger);
reader.Config.setStopTrigger(triggerInfo.StopTrigger);
} catch (InvalidUsageException e) {
e.printstacktrace();
} catch (OperationFailureException e) {
e.printstacktrace();
}
}
}
eventReadNotify 看起来像这样:
public void eventReadNotify(RfidReadEvents e) {
// Recommended to use new method getReadTagsEx for better performance in case of large tag population
TagData[] mytags = reader.Actions.getReadTags(100);
if (mytags != null) {
for (int index = 0; index < mytags.length; index++) {
Log.d(TAG,"Tag ID " + mytags[index].getTagID());
ACCESS_OPERATION_CODE aoc = mytags[index].getopCode();
ACCESS_OPERATION_STATUS aos = mytags[index].getopStatus();
if (aoc == ACCESS_OPERATION_CODE.ACCESS_OPERATION_READ && aos == ACCESS_OPERATION_STATUS.ACCESS_SUCCESS) {
if (mytags[index].getMemoryBankData().length() > 0) {
Log.d(TAG," Mem Bank Data " + mytags[index].getMemoryBankData());
}
}
}
}
}
当我扫描标签时,我得到了正确的 TagID,但 mytags[index].getopCode()
和 mytags[index].getopStatus()
都返回空值。
我感谢每一个可能导致成功扫描的建议。
谢谢。
解决方法
我设法为我的问题找到了解决方案。要使用 Zebra 手持式扫描器执行任何读取或写入任务,必须满足以下两个条件。在此处查看参考:How to write to RFID tag using RFIDLibrary by Zebra?
// make sure Inventory is stopped
reader.Actions.Inventory.stop();
// make sure DPO is disabled
reader.Config.setDPOState(DYNAMIC_POWER_OPTIMIZATION.DISABLE);
您必须停止库存并确保禁用 dpo 才能从标签中获取 TagID 以外的数据。不幸的是,阅读 RFID 标签的文档中没有提到这一点。