Home >Java >javaTutorial >How to Write NDEF Records to an NFC Tag Using enableReaderMode API?

How to Write NDEF Records to an NFC Tag Using enableReaderMode API?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-12 20:38:02223browse

How to Write NDEF Records to an NFC Tag Using enableReaderMode API?

How to Write NDEF Records to NFC Tag

Understanding the Issue

NDEF, or NFC Data Exchange Format, is used to store data on NFC tags. To write NDEF records to an NFC tag, you need to:

  1. Compose an NDEF message with the desired data.
  2. Identify and connect to the NFC tag.
  3. Write the NDEF message to the tag.

Writing NDEF Records Using enableReaderMode API

The previous approach of using Intent-based NFC operations introduced limitations and user experience issues. To address these, the newer and recommended approach is to use enableReaderMode API.

This API provides direct control over the NFC reader, allowing you to:

  • Turn off system notification sounds
  • Prevent your app from being paused during the read operation
  • Handle errors silently and provide feedback when the write operation is successful

Example Implementation

Below is a code snippet that implements this approach:

public class NFCActivity extends AppCompatActivity implements NfcAdapter.ReaderCallback {
    private NfcAdapter mNfcAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nfc);

        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
    }

    @Override
    protected void onResume() {
        super.onResume();

        if (mNfcAdapter != null) {
            Bundle options = new Bundle();
            options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, 250);

            mNfcAdapter.enableReaderMode(this, this,
                    NfcAdapter.FLAG_READER_NFC_A |
                            NfcAdapter.FLAG_READER_NFC_B |
                            NfcAdapter.FLAG_READER_NFC_F |
                            NfcAdapter.FLAG_READER_NFC_V |
                            NfcAdapter.FLAG_READER_NFC_BARCODE |
                            NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS,
                    options);
        }
    }

    @Override
    public void onTagDiscovered(Tag tag) {
        Ndef mNdef = Ndef.get(tag);
        if (mNdef != null) {
            NdefRecord mRecord =
                    NdefRecord.createTextRecord("en", "English String");
            NdefMessage mMsg = new NdefMessage(mRecord);

            try {
                mNdef.connect();
                mNdef.writeNdefMessage(mMsg);

                runOnUiThread(() -> {
                    Toast.makeText(getApplicationContext(),
                            "Write to NFC Success", Toast.LENGTH_SHORT).show();
                });

                try {
                    Uri notification = RingtoneManager.
                            getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                    Ringtone r = RingtoneManager.getRingtone(getApplicationContext(),
                            notification);
                    r.play();
                } catch (Exception e) {
                    // Handle error playing sound
                }

            } catch (Exception e) {
                // Handle errors
            } finally {
                try {
                    mNdef.close();
                } catch (Exception e) {
                    // Handle error closing tag
                }
            }
        }
    }
}

This approach ensures a more reliable and user-friendly NFC writing experience.

The above is the detailed content of How to Write NDEF Records to an NFC Tag Using enableReaderMode API?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn