android - 在 Zebra RFID Android 中执行盘点时如何获取内存库用户数据?
问题描述
虽然 RFID API 应用程序允许您在选择要访问的内存库后执行清单,但我似乎无法在我的应用程序中允许任何类似的功能,我想知道如何做到这一点,因为现在,标记.getMemoryBankData() 只返回“null”,尽管我知道标签中有数据
我已经尝试搜索文档和 Zebra 技术文档以获取某种配置选项,让我也可以访问它。我已经尝试从 RFID API .apk 中提取代码来尝试看看它是如何完成的,但是它太模糊了,我找不到它。
这是我的触发器和天线配置,如果有帮助的话。
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(false);
// 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);
reader.Config.setUniqueTagReport(true);
// power levels are index based so maximum power supported get the last one
MAX_POWER = reader.ReaderCapabilities.getTransmitPowerLevelValues().length - 1;
// set antenna configurations
Antennas.AntennaRfConfig config = reader.Config.Antennas.getAntennaRfConfig(1);
config.setTransmitPowerIndex(MAX_POWER);
config.setrfModeTableIndex(0);
config.setTari(0);
reader.Config.setDPOState(DYNAMIC_POWER_OPTIMIZATION.DISABLE);
reader.Config.setAccessOperationWaitTimeout(500);
reader.Config.Antennas.setAntennaRfConfig(1, config);
// Set the singulation control
Antennas.SingulationControl s1_singulationControl = reader.Config.Antennas.getSingulationControl(1);
s1_singulationControl.setSession(SESSION.SESSION_S0);
s1_singulationControl.Action.setInventoryState(INVENTORY_STATE.INVENTORY_STATE_A);
s1_singulationControl.Action.setSLFlag(SL_FLAG.SL_ALL);
reader.Config.Antennas.setSingulationControl(1, s1_singulationControl);
// delete any prefilters
reader.Actions.PreFilters.deleteAll();
//
} catch (InvalidUsageException | OperationFailureException e) {
e.printStackTrace();
}
我一直期望获得 MEMORY_BANK_USER 数据,但它总是返回“null”,虽然我知道有一种方法可以在无需执行读取操作的情况下获得它,但我似乎无法找到方法。如果有人可以帮助解决这个问题,我将永远感激不尽,谢谢。
解决方案
要读取 MEMORY_BANK_USER 内容,请使用标签访问模式
rfidreader.Events.setAttachTagDataWithReadEvent(true);
和事件处理程序的代码
class EventHandler implements RfidEventsListener {
// Read Event Notification
public void eventReadNotify(RfidReadEvents e) {
TagData tag = e.getReadEventData().tagData;
if (tag.getOpCode() == ACCESS_OPERATION_CODE.ACCESS_OPERATION_READ
&& tag.getOpStatus() == ACCESS_OPERATION_STATUS.ACCESS_SUCCESS) {
Log.d(TAG, "eventReadNotify - tag id " + tag.getTagID() + " and mem bank " + tag.getMemoryBankData());
}
}
}