Ich habe eine App, die die Nutzlast eines NDEF-Datensatzes auf MIFARE Ultralight-Tags liest.Android NFC: 'd' vorangestellt NDEF Nutzlast
Die Nutzlast in einen NDEF Text Datensatz gepackt und der Textwert ist in folgendem Format:
1,10,200,Arthur smith
So gibt es immer drei Kommas, die die 3-Nummern und den Namen trennen.
Ich benutze NXP TagWriter, um das Tag zu formatieren, und meine App kann die Nutzlast korrekt lesen. Das Problem ist, dass die Firma, für die ich arbeite, eine separate Firma verwendet hat, um die Tags für uns zu formatieren. Wenn meine App diese Tags scannt, liegt ein Problem vor. Die Payload liest dann:
Dies bewirkt, dass meine App das Tag nicht verarbeiten.
Die NXP App kann erfolgreich lesen Sie das das Tag und wenn ich das Tag mit den gleichen Daten mit NXP TagWriter formatieren, dann wird meine App das Tag korrekt lesen.
Es scheint, dass es ein 'd' vor der Nutzlast gibt, wenn es von der Formatierungsfirma kommt, die nur meine App sehen kann.
Hat jemand irgendwelche Ideen, was das "d" ist und wie ich das beheben kann? Hier
ist der Code, den ich verwende, um die Nutzlast zu lesen:
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(i.getAction()) || NfcAdapter.ACTION_TAG_DISCOVERED.equals(i.getAction())) {
if(NfcScannerApplication.isCanScanNfcTag() == true){
messages = i.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (messages != null) {
//setContentView(R.layout.successfulnfc);
NfcScannerApplication.startNfcTimer();
//Toast.makeText(this, "NFC timer set", Toast.LENGTH_LONG).show();
Log.e(TAG, "Found " + messages.length + " NDEF messages"); // is almost always just one
vibrate(); // signal found messages :-)
// parse to records
for (int i = 0; i < messages.length; i++) {
List<Record> records = null;
try {
records = new Message((NdefMessage)messages[i]);
} catch (FormatException e) {
e.printStackTrace();
}
Log.e(TAG, "Found " + records.size() + " records in message " + i);
for(int k = 0; k < records.size(); k++) {
Log.e(TAG, " Record #" + k + " is of class " + records.get(k).getClass().getSimpleName());
Record record = records.get(k);
NdefRecord ndefRecord = record.getNdefRecord();
byte[] arr = ndefRecord.getPayload();
String payload = new String(arr);
if(payload.length() > 0){
payload = payload.substring(3, payload.length());
Log.e(TAG, "payload = " + payload);
int counter = 0;
for(int z = 0; z < payload.length(); z++) {
if(payload.charAt(z) == ',') {
counter++;
}
}
if(counter == 3){
//Toast.makeText(this, "comma count = 3 ", Toast.LENGTH_SHORT).show();
String[] splitPayload = payload.split(",");
String tagType = splitPayload[0];
String tagCompany = splitPayload[1];
String tagClientID = splitPayload[2];
String tagClientName = splitPayload[3];
Wie Sie die Nutzlast lesen Sie in Ihrem App? Wie schreiben Sie die Payload (d. H. Welches Format haben Sie gewählt) mit NXP TagWriter? –
Ich habe ein wenig Forschung mit der NFC-Tag-Formatierung Firma getan und sie laden die Daten auf dem Tag über .csv-Datei in NXP TagWriter. Wenn sie die Daten manuell einzeln in die Tags schreiben, wird kein 'd' vorangestellt. Es scheint, dass das "d" erscheint, wenn es von einem Excel-Blatt geladen wird. – turtleboy
Das Format, das ich benutze, wenn ich NXP-Tagwriter benutze, ist reiner Text. Ich kann Ihnen meinen Quellcode in Bezug auf den Code posten, den ich benutze, um die Nutzlast zu lesen. [EDIT1] – turtleboy