У меня есть eventbus
внутри исполняемого файла, который должен работать бесконечно с интервалом (2) две секунды.Я также использую scheduledExecutorService = Executors.newScheduledThreadPool(4);
это мой onResume()
EventBus.getDefault().register(this);
rfscanner = scheduledExecutorService.scheduleAtFixedRate(mRunnable, 0, 2, TimeUnit.SECONDS);
private final Runnable mRunnable = new Runnable() {
@Override
public void run() {
// Open RF Card interface
Log.e("test why", "test");
EventBus.getDefault().post(new EB_TapCard());
}
};
Внутри моего EventBus()
есть функция для RFCard Reader.
private void validateCard(){
try {
RFCardInterface.waitForCardPresent(RFCardInterface.CONTACTLESS_CARD_MODE_AUTO, 1, -1);
if (RFCardInterface.isCallBackCalled &&
RFCardInterface.notifyEvent.eventID == RFCardInterface.CONTACTLESS_CARD_EVENT_FOUND_CARD) {
int counter = 0;
Log.e("test","test " + String.valueOf(counter+=1));
IDCatcher = StringUtility.ByteArrayToString(RFCardInterface.notifyEvent.eventData,
RFCardInterface.notifyEvent.eventData.length).substring(9, 21).replace(" ", "");
Cursor c = dbhelper.getReadableDatabase().rawQuery("select * from trans_settings order by _id desc limit 1", null);
if (c != null && c.moveToFirst()) {
String is_dispatched = c.getString(c.getColumnIndex(DBHelper.TRANS_IS_DISPATCH));
String is_arrived = c.getString(c.getColumnIndex(DBHelper.TRANS_IS_ARRIVED));
String is_closed = c.getString(c.getColumnIndex(DBHelper.TRANS_IS_CLOSED));
c.close();
dispatch_code = dispatch_status;
if (is_dispatched.equals("1") && is_arrived.equals("1") && is_closed.equals("1")) {
SearchEmp_Name();
} else if (is_dispatched.equals("1") && is_arrived.equals("1") && is_closed.equals("0")) {
SecondTripDisp();
if (dispatchProgressOverlay.getVisibility() == View.VISIBLE) {
dispatchProgressOverlay.setVisibility(View.GONE);
}
if (getActivity() != null) {
getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
} else if (is_dispatched.equals("0") && is_arrived.equals("0") && is_closed.equals("1")) {
SearchEmp_Name();
} else {
Log.e("TAG", "UNEXPECTED ERROR");
}
} else {
SearchEmp_Name();
}
}else{
Log.e("Card is Reading","Card is Reading");
}
} catch (Throwable e) {
e.printStackTrace();
}
}
Runnable работает так, как есть.Основная проблема заключается в том, что если я оставлю считывающее устройство на пару секунд и нажму на RFCard, он обрабатывается несколько раз.Я просто хочу сделать этот процесс один раз, так как у меня есть проверка
(RFCardInterface.isCallBackCalled &&
RFCardInterface.notifyEvent.eventID == RFCardInterface.CONTACTLESS_CARD_EVENT_FOUND_CARD)
извините за мое плохое объяснение.Я приведу пример.
Запуск моего приложения -> Открывается RFCardReader -> Запускается бесконечно -> Если я позволю, если в течение 10 секунд -> Процесс шины событий (5)раз.
Это логи
![Logs](https://i.stack.imgur.com/Xhfro.png)
А это мои SQLite Database
![SQLite Database](https://i.stack.imgur.com/Ri5Zm.png)