Когда я тестирую образец кода, доступный по этому URL-адресу (https://www.zebra.com/us/en/support-dow ... obile.html), этот код считывает теги почти в 10 раз быстрее, чем мой код.
Большинство деталей выглядят одинаково
Модель моего устройства — Zebra RFD8500
Я тестировал обе стороны, с и без интерфейс, но мой код всегда работал медленно.
Спасибо за помощь
private class CreateInstanceTask extends AsyncTask {
@Override
protected Void doInBackground(Void... voids) {
Log.d(TAG, "CreateInstanceTask");
// Based on support available on host device choose the reader type
InvalidUsageException invalidUsageException = null;
readers = new Readers(context, ENUM_TRANSPORT.BLUETOOTH);
try {
availableRFIDReaderList = readers.GetAvailableRFIDReaderList();
} catch (InvalidUsageException e) {
e.printStackTrace();
}
catch(Exception ex){
ex.printStackTrace();
}
if (invalidUsageException != null) {
readers.Dispose();
readers = null;
if (readers == null) {
readers = new Readers(context, ENUM_TRANSPORT.BLUETOOTH);
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
connectReader();
}
}
private void ConfigureReader() {
Log.d(TAG, "ConfigureReader " + reader.getHostName());
if (reader.isConnected()) {
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);
// 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.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();
}
}
}
synchronized void performInventory() {
// check reader connection
if (!isReaderConnected())
return;
try {
reader.Actions.Inventory.perform();
} catch (InvalidUsageException e) {
e.printStackTrace();
} catch (OperationFailureException e) {
e.printStackTrace();
}
}
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);
if (myTags != null) {
for (int index = 0; index < myTags.length; index++) {
allTagCount++;
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() {
@Override
protected Void doInBackground(Void... voids) {
context.handleTriggerPress(true);
return null;
}
}.execute();
}
if (rfidStatusEvents.StatusEventData.HandheldTriggerEventData.getHandheldEvent() == HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED) {
new AsyncTask() {
@Override
protected Void doInBackground(Void... voids) {
context.handleTriggerPress(false);
return null;
}
}.execute();
}
}
}
}
private void setAntennaPower(int power) {
Log.d(TAG, "setAntennaPower " + power);
try {
// set antenna configurations
Antennas.AntennaRfConfig config = reader.Config.Antennas.getAntennaRfConfig(1);
config.setTransmitPowerIndex(power);
config.setrfModeTableIndex(0);
config.setTari(0);
reader.Config.Antennas.setAntennaRfConfig(1, config);
} catch (InvalidUsageException e) {
e.printStackTrace();
} catch (OperationFailureException e) {
e.printStackTrace();
}
}
Подробнее здесь: https://stackoverflow.com/questions/771 ... ags-slowly
Zebra Android SDK медленно считывает RFID-метки ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1772207606
Anonymous
Когда я тестирую образец кода, доступный по этому URL-адресу (https://www.zebra.com/us/en/support-downloads/software/demo/123rfid-mobile.html), этот код считывает теги почти в 10 раз быстрее, чем мой код.
Большинство деталей выглядят одинаково
Модель моего устройства — Zebra RFD8500
Я тестировал обе стороны, с и без интерфейс, но мой код всегда работал медленно.
Спасибо за помощь
private class CreateInstanceTask extends AsyncTask {
@Override
protected Void doInBackground(Void... voids) {
Log.d(TAG, "CreateInstanceTask");
// Based on support available on host device choose the reader type
InvalidUsageException invalidUsageException = null;
readers = new Readers(context, ENUM_TRANSPORT.BLUETOOTH);
try {
availableRFIDReaderList = readers.GetAvailableRFIDReaderList();
} catch (InvalidUsageException e) {
e.printStackTrace();
}
catch(Exception ex){
ex.printStackTrace();
}
if (invalidUsageException != null) {
readers.Dispose();
readers = null;
if (readers == null) {
readers = new Readers(context, ENUM_TRANSPORT.BLUETOOTH);
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
connectReader();
}
}
private void ConfigureReader() {
Log.d(TAG, "ConfigureReader " + reader.getHostName());
if (reader.isConnected()) {
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);
// 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.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();
}
}
}
synchronized void performInventory() {
// check reader connection
if (!isReaderConnected())
return;
try {
reader.Actions.Inventory.perform();
} catch (InvalidUsageException e) {
e.printStackTrace();
} catch (OperationFailureException e) {
e.printStackTrace();
}
}
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);
if (myTags != null) {
for (int index = 0; index < myTags.length; index++) {
allTagCount++;
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() {
@Override
protected Void doInBackground(Void... voids) {
context.handleTriggerPress(true);
return null;
}
}.execute();
}
if (rfidStatusEvents.StatusEventData.HandheldTriggerEventData.getHandheldEvent() == HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED) {
new AsyncTask() {
@Override
protected Void doInBackground(Void... voids) {
context.handleTriggerPress(false);
return null;
}
}.execute();
}
}
}
}
private void setAntennaPower(int power) {
Log.d(TAG, "setAntennaPower " + power);
try {
// set antenna configurations
Antennas.AntennaRfConfig config = reader.Config.Antennas.getAntennaRfConfig(1);
config.setTransmitPowerIndex(power);
config.setrfModeTableIndex(0);
config.setTari(0);
reader.Config.Antennas.setAntennaRfConfig(1, config);
} catch (InvalidUsageException e) {
e.printStackTrace();
} catch (OperationFailureException e) {
e.printStackTrace();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/77181744/zebra-android-sdk-is-reading-rfid-tags-slowly[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия