销邦PDA读取RFID的一次简单尝试

这次项目使用的设备为销邦R2手持终端,所以文中概念和相关代码只针对此类型设备,不确定能否对其他产品及型号构成参考建议。

1、首先让我们了解一下被读取的标签的基本概念:

Gen2 标签一般分为 4 个区:Reserve(保留区); EPC 区; TID 区; USER 区; 读出
为 16 进制字符数,写需要 4 倍数 16 进制字符数;
Reserve(保留区):存放密码。0-1 存放销毁密码,永远销毁标签,2-3 块
存放访问密码。
EPC 区:标签 EPC 码(全球物联网统一电子商品码),一般为 96 位共 6 块,
也有 64 位。扩展可达 496 位,前面两个块是:校验块和 PC 块(PC 区标明
EPC 的长度)。所以通常读 EPC 区从第二块开始,共 6 个块。
TID 区:一般出厂时已经确定,不可修改,只读,通常有 64 位/96 位(4 块 或 6 个块),标签的唯一 ID 标识。
USER 区:专门为用户存放数据区域,可读写,从 0 块开始(一般 0-31 块 共 32 块)。

2、上手开发

流程.png

第一步:获取 ModuleController 实例,传入DataListener(由流程可知要在onStart()中执行)

mModuleController = ModuleController.getInstance(context, new 
ModuleController.DataListener() {
        @Override
        public void onServiceStarted() {
                //TODO 服务启动成功
        @Override
        public void onError() {
                //TODO 模块不存在,初始化失败
        @Override
        public void onConnect(boolean isSuccess) {
                //TODO 连接成功
        }
        @Override
        public void onDisConnect(boolean isSuccess) {
                // TODO 断开连接
        }
        @Override
        public void onReadTag(byte[] tagData) {
                super.onReadTag(tagData);
                 //TODO 读取成功
                String tag = DataUtils.byteToHexStr(tagData);
            }
);
ps:所有的标签操作都会在DataListener的方法中返回,可重写相关方法获取对应操作的数据
public DataListener() {
        }

        public void onServiceStarted() {
        }

        public void onError() {
        }

        public void onConnect(boolean isSuccess) {
        }

        public void onDisConnect(boolean isSuccess) {
        }

        public void onReadTag(byte[] tagData) {
        }

        public void onWriteTag(boolean isSuccess) {
        }

        public void onLockTag(int lockType) {
        }

        public void onInventoryTag(byte[] epcTid, byte[] epc, byte[] tid, byte[] pc, byte count, float rssi, float freq) {
        }

        public void onInventoryNewTag(byte[] epcTid, byte[] epc, byte[] tid, byte[] pc, byte count, float rssi, float freq) {
        }

        public void onRefreshModule() {
        }

        public void onSetBeep() {
        }

        public void onSetParameters(int paraKey, boolean isSuccess) {
        }

        public void onGetParameters(int paraKey, int paraValue) {
        }

        public void onGetInfo(String info) {
        }

        public void onSetRssiRange() {
        }

        public void onGetRssiRange(float rssiMin, float rssiMax) {
        }

        public void onGetPowerRange(int powerMin, int powerMax) {
        }

第二步:执行相关操作(盘点标签,读,写等,以读为例)

moduleController.moduleReadTag(bank, address, blockCount, password,tagEPC);

读取成功后会回调到DataListener.onReadTag()

 @Override
 public void onReadTag(byte[] tagData) {
         super.onReadTag(tagData);
         //TODO 读取成功
         String tag = DataUtils.byteToHexStr(tagData);
 }

相关参数解释:

参数 释义
bank 区块,包括Reserved 区,EPC 区,TID 区,User 区 4 个区块。
address 起始地址
blockCount 读取块数
password 密码,没有则为null
tagEPC 指定的标签(可以盘点后获取),没有为null

第三步:页面关闭时,关闭moduleController

  @Override
    protected void onDestroy() {
        super.onDestroy();
        moduleController.close();
    }

你可能感兴趣的:(销邦PDA读取RFID的一次简单尝试)