Как читать теги NFC в Android?

Как я могу читать и отображать сообщения NDEF из тегов NFC? Пожалуйста помогите. Может ли кто-нибудь предоставить образец исходного кода для чтения тега Nfc?


person Santhosh    schedule 26.09.2011    source источник


Ответы (2)


1) Общее описание NFC на Android находится здесь< br> 2) NFCDemo здесь
3) Очень хорошо информация также находится здесь
4 ) Также в книге "Программирование Android" от "Zigurd Mednieks" есть глава о NFC

BR
STeN

person STeN    schedule 26.09.2011
comment
К сожалению, NFCDemo больше не доступен по этой ссылке. - person LordParsley; 23.03.2018

У нас есть два варианта чтения карты nfc.

  1. Читать из кеша

       Ndef ndef = Ndef.get(tag);
        if (ndef == null) {
            // NDEF is not supported by this Tag. 
            return null;
        }
    
        NdefMessage ndefMessage = ndef.getCachedNdefMessage();
    
        if (ndefMessage == null) {
            mTextView.setText("The tag is empty !");
            return null;
        }
    
        NdefRecord[] records = ndefMessage.getRecords();
        for (NdefRecord ndefRecord : records) {
            if (ndefRecord.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(ndefRecord.getType(), NdefRecord.RTD_TEXT)) {
                try {
                    return readText(ndefRecord);
                } catch (UnsupportedEncodingException e) {
                    Log.e(TAG, "Unsupported Encoding", e);
                }
            }
        }
    
  2. Читать напрямую, используя

public void readFromTag(Intent intent){

    Ndef ndef = Ndef.get(detectedTag);


    try{
        ndef.connect();

        txtType.setText(ndef.getType().toString());
        txtSize.setText(String.valueOf(ndef.getMaxSize()));
        txtWrite.setText(ndef.isWritable() ? "True" : "False");
        Parcelable[] messages = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

        if (messages != null) {
            NdefMessage[] ndefMessages = new NdefMessage[messages.length];
            for (int i = 0; i < messages.length; i++) {
                ndefMessages[i] = (NdefMessage) messages[i];
            }
            NdefRecord record = ndefMessages[0].getRecords()[0];

            byte[] payload = record.getPayload();
            String text = new String(payload);
            txtRead.setText(text);


            ndef.close();

        }
    }
    catch (Exception e) {
        Toast.makeText(getApplicationContext(), "Cannot Read From Tag.", Toast.LENGTH_LONG).show();
    }
}
person Ranjith Subramaniam    schedule 21.04.2014