java - 如何只读取一个 rfid 标签
问题描述
我正在开发一个只需要读取一个 RFID 标签的应用程序,我尝试只读取第一个读取的 Rfid 标签,但问题是数组的零元素在不断变化。我可以在日志中看到它。
这是我的代码:
'''
// Read/Status Notify handler
// Implement the RfidEventsLister class to receive event notifications
public class EventHandler implements RfidEventsListener {
// Read Event Notification
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);
firstSeenTag = myTags[0].getTagID();
Log.d(TAG, "firstSeenTag Tag ID " + firstSeenTag);
if (myTags != null) {
for (int index = 0; index < myTags.length; index++) {
Log.d(TAG, "Tag ID " + myTags[index].getTagID());
if (myTags[index].getOpCode() == ACCESS_OPERATION_CODE.ACCESS_OPERATION_READ &&
myTags[index].getOpStatus() == ACCESS_OPERATION_STATUS.ACCESS_SUCCESS) {
if (myTags[index].getMemoryBankData().length() > 0) {
Log.d(TAG, " Mem Bank Data " + myTags[index].getMemoryBankData());
}
}
if (myTags[index].isContainsLocationInfo()) {
short dist = myTags[index].LocationInfo.getRelativeDistance();
Log.d(TAG, "Tag relative distance " + dist);
}
}
// possibly if operation was invoked from async task and still busy
// handle tag data responses on parallel thread thus THREAD_POOL_EXECUTOR
new AsyncDataUpdate().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, myTags);
}
}
// Status Event Notification
public void eventStatusNotify(RfidStatusEvents rfidStatusEvents) {
Log.d(TAG, "Status Notification: " + rfidStatusEvents.StatusEventData.getStatusEventType());
if (rfidStatusEvents.StatusEventData.getStatusEventType() == STATUS_EVENT_TYPE.HANDHELD_TRIGGER_EVENT) {
if (rfidStatusEvents.StatusEventData.HandheldTriggerEventData.getHandheldEvent() == HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_PRESSED) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
context.handleTriggerPress(true);
Log.d(TAG, "firstSeenTag TriggerPress Tag ID " + firstSeenTag);
return null;
}
}.execute();
}
if (rfidStatusEvents.StatusEventData.HandheldTriggerEventData.getHandheldEvent() == HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED) {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
context.handleTriggerPress(false);
Log.d(TAG, "firstSeenTag TriggerRelease Tag ID " + firstSeenTag);
return null;
}
}.execute();
}
}
}
}
'''
我尝试将标签数参数更改为 1,但没有效果。
''' TagData[] myTags = reader.Actions.getReadTags(100);
firstSeenTag = myTags[0].getTagID();
Log.d(TAG, "firstSeenTag Tag ID " + firstSeenTag);
'''
如您所见,我将数组的零值分配给firstSeenTag变量,但从日志来看,该值分配给读取的每个标签。
当然,您可以在阅读器上释放触发器的那一刻为变量赋值,但这对用户来说很不方便,因为他只有释放阅读器的触发器才能看到读取 rfid 标签
读取一个 rfid 标签后如何停止读取?
解决方案
推荐阅读
- ubuntu - 在从机上运行 kubernetes 部署时出现 ImagePullBackOff 错误,其中 docker docker 映像存在于主机中
- javascript - 单击第二个下拉列表时,黑框应保持可见
- php - 将分类术语添加到 WooCommerce 产品永久链接
- postgresql - PostgreSQL中具有相同名称(值)的列的总和
- capnproto - CapnProto 中的前向声明
- linux - GREP 或 Regex 搜索具有特定系列的唯一字符
- javascript - 如何更改饼图中向下钻取的点格式?
- c++ - 如何在 WinDBG 预览版上设置源服务器?
- visual-studio - 解决方案资源管理器:将搜索限制为选定的文件夹
- facebook - Xamarin 和 Facebook 身份验证