这次项目使用的设备为销邦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();
}
网友评论