首页 > 解决方案 > 在 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”,虽然我知道有一种方法可以在无需执行读取操作的情况下获得它,但我似乎无法找到方法。如果有人可以帮助解决这个问题,我将永远感激不尽,谢谢。

标签: androidrfid

解决方案


要读取 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());
    }
  }
}

推荐阅读