Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Read data from NFC tag [duplicate]

Tags:

android

nfc

Possible Duplicate:
Strange character on Android NDEF record payload

I am trying to read some plain text from NFC tag. and my codes are below;

public void processReadIntent(Intent intent){

    Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
            NfcAdapter.EXTRA_NDEF_MESSAGES);

    NdefMessage msg = (NdefMessage) rawMsgs[0];
    // record 0 contains the MIME type, record 1 is the AAR, if present
    Log.d("msg", msg.getRecords()[0].getPayload().toString());

    String PatientId=new String(msg.getRecords()[0].getPayload());     
    String UserName="nurse";
    String Password="nurse";

   Toast.makeText(getApplicationContext(), PatientId, Toast.LENGTH_LONG).show();

    //tv.setText(new String(msg.getRecords()[0].getPayload()));
}

BUT, the problem here is when i read data i can see that my desired data has a 'en' at the start. for example: if my actual data in 'john', when i read, i can see it as 'enjohn'. I know 'en' is the language header. But how do I remove it??

i have tried with substring, but after that don't even work...

any idea about how to remove this language header???

like image 966
Crime Master Gogo Avatar asked Feb 17 '23 16:02

Crime Master Gogo


1 Answers

Probably, you have the same problem here and how to read an NFC tag properly here

Snippet taken from 2nd link.

 try
{
        byte[] payload = record.getPayload();

        /*
     * payload[0] contains the "Status Byte Encodings" field, per the
     * NFC Forum "Text Record Type Definition" section 3.2.1.
     *
     * bit7 is the Text Encoding Field.
     *
     * if (Bit_7 == 0): The text is encoded in UTF-8 if (Bit_7 == 1):
     * The text is encoded in UTF16
     *
     * Bit_6 is reserved for future use and must be set to zero.
     *
     * Bits 5 to 0 are the length of the IANA language code.
     */

         //Get the Text Encoding
        String textEncoding = ((payload[0] & 0200) == 0) ? "UTF-8" : "UTF-16";

        //Get the Language Code
        int languageCodeLength = payload[0] & 0077;
        String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");

        //Get the Text
        String text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);

    return new TextRecord(text, languageCode);
}
catch(Exception e)
{
        throw new RuntimeException("Record Parsing Failure!!");
}
like image 139
PCoder Avatar answered Feb 26 '23 19:02

PCoder