Hi,
I am using a modified version of the demo code from the rfid-sdk-for-android-dg-en.pdf documentation.
I am having an interesting problem that the TagData[] myTags array is null but not always. I have included the code bellow if anyone can point me in the right direction i would be grateful.
package uk.co.assettrac.rfd2000_tc20_example;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.widget.TextView;import android.widget.Toast;import com.zebra.rfid.api3.*;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {
private static Readers readers; private static ArrayList availableRFIDReaderList; private static ReaderDevice readerDevice; private static RFIDReader reader; private static String TAG = "DEMO"; TextView textView; private EventHandler eventHandler; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// UI textView = (TextView) findViewById(R.id.TagText);// SDK if (readers == null) {
readers = new Readers(this, ENUM_TRANSPORT.SERVICE_SERIAL); }
new AsyncTask() {
@Override protected Boolean doInBackground(Void... voids) {
try {
if (readers != null) {
if (readers.GetAvailableRFIDReaderList() != null) {
availableRFIDReaderList =
readers.GetAvailableRFIDReaderList(); if (availableRFIDReaderList.size() != 0) {
// get first reader from list readerDevice = availableRFIDReaderList.get(0); reader = readerDevice.getRFIDReader(); if (!reader.isConnected()) {
// Establish connection to the RFID Reader reader.connect(); ConfigureReader(); return true; }
}
}
}
} catch (InvalidUsageException e) {
e.printStackTrace(); } catch (OperationFailureException e) {
e.printStackTrace(); Log.d(TAG, "OperationFailureException " + e.getVendorMessage()); }
return false; }
@Override protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean); if (aBoolean) {
Toast.makeText(getApplicationContext(), "Reader Connected", Toast.LENGTH_LONG).show();//textView.setText("Reader connected"); }
}
}.execute(); }
private void ConfigureReader() {
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(true);// 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); } catch (InvalidUsageException e) {
e.printStackTrace(); } catch (OperationFailureException e) {
e.printStackTrace(); }
}
}
@Override protected void onDestroy() {
super.onDestroy(); try {
if (reader != null) {
reader.Events.removeEventsListener(eventHandler); reader.disconnect(); Toast.makeText(getApplicationContext(), "Disconnecting reader", Toast.LENGTH_LONG).show(); reader = null; readers.Dispose(); readers = null; }
} catch (InvalidUsageException e) {
e.printStackTrace(); } catch (OperationFailureException e) {
e.printStackTrace(); } catch (Exception e) {
e.printStackTrace(); }
}
// 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); 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()); }
}
}
} else {
Log.d(TAG, "TagData Array Null"); }
}
// 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) {
try {
reader.Actions.Inventory.perform(); } catch (InvalidUsageException e) {
e.printStackTrace(); } catch (OperationFailureException e) {
e.printStackTrace(); }
return null; }
}.execute(); }
if (rfidStatusEvents.StatusEventData.HandheldTriggerEventData.getHandheldEvent() ==
HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED) {
new AsyncTask() {
@Override protected Void doInBackground(Void... voids) {
try {
reader.Actions.Inventory.stop(); } catch (InvalidUsageException e) {
e.printStackTrace(); } catch (OperationFailureException e) {
e.printStackTrace(); }
return null; }
}.execute(); }
}
}
}
}
0 Replies