I have tried a lot of methods, nothing worked for me. The code below shows the ndefmessage but it is not in a readable format. It displays some ndef message format as b@15d…
public void onNewIntent(Intent intent) {
Tag myTag = (Tag)intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
def ndefTag = Ndef.get(myTag);
int size = ndefTag.getMaxSize(); // tag size
String type = ndefTag.getType(); // tag type
NdefMessage ndefMesg = ndefTag.getCachedNdefMessage();
NdefRecord[] ndefRecords = ndefMesg.getRecords();
int len = ndefRecords.length;
for (int i = 0; i < len; i++) {
typ = ndefRecords[i].getType();
payload = ndefRecords[i].getPayload();
}
String textEncoding = ((payload[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
int languageCodeLength = payload[0] & 0077;
try {
@SuppressWarnings("unused")
String languageCode = new String(payload, 1,languageCodeLength,"US-ASCII");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
text =new String(payload,languageCodeLength+1,payload.length
-languageCodeLength - 1, textEncoding);
Toast.makeText(getApplicationContext(),
text+"First Try",Toast.LENGTH_LONG).show();
mText.setText("Discovered tag "+text);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
String val = new String(typ);
val+=new String(payload);
Toast.makeText(getApplicationContext(),
"Second"+val,Toast.LENGTH_LONG).show();
}
Log.i("Foreground dispatch", "Discovered tag with intent: " + intent);
mText.setText("Discovered tag "+text);
}
The payload of an NdefRecord is not necessarily a
String.You need to look at the Type Name Format (TNF) and the Type to determine how to decode the payload.
If you’ve encoded a String in the payload when you wrote the tag
new String(record.getPayload())will work fine.If you’ve written a plain text tag with some other software, it is probably tnf
TNF_WELL_KNOWNtypeRTD_TEXT. In that case the payload byte array will contain the language code as the first byte of the String. See http://developer.android.com/resources/samples/NFCDemo/src/com/example/android/nfc/record/TextRecord.html for an example on how to parse the payload.