Maison > Java > javaDidacticiel > Comment écrire des enregistrements NDEF sur des balises NFC avec l'API EnableReaderMode d'Android ?

Comment écrire des enregistrements NDEF sur des balises NFC avec l'API EnableReaderMode d'Android ?

Barbara Streisand
Libérer: 2024-11-15 09:20:03
original
404 Les gens l'ont consulté

How to Write NDEF Records to NFC Tags with Android's enableReaderMode API?

Comment écrire des enregistrements NDEF sur une balise NFC à l'aide de l'API activateReaderMode

Introduction

L'écriture d'enregistrements NDEF sur des balises NFC nécessite une approche différente dans Android pour garantir la fiabilité et éviter les échecs d'écriture. L'ancien système basé sur l'intention entraînait souvent des problèmes dus à des lectures interrompues et à des erreurs silencieuses.

Utilisation de l'API EnableReaderMode

La nouvelle API EnableReaderMode offre une approche plus robuste. Il désactive les notifications système, permettant à votre application de contrôler la synchronisation des sons et de gérer efficacement le processus de lecture/écriture. Ce faisant, vous pouvez minimiser les échecs d'écriture et la corruption des données.

Exemple de code

L'extrait de code Java suivant montre comment utiliser l'API activateReaderMode :

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);

        // Rest of Activity setup
    }

    @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
    protected void onPause() {
        super.onPause();
        if(mNfcAdapter!= null)
            mNfcAdapter.disableReaderMode(this);
    }

    @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();
                });

                Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
                r.play();

            } catch (Exception e) {
                // Handle errors
            } finally {
                try {
                    mNdef.close();
                } catch (IOException e) {
                    // Handle I/O failure or cancelled operation
                }
            }
        }
    }
}
Copier après la connexion

Notes supplémentaires

  • Vous pouvez lire le message NDEF mis en cache en utilisant mNdef.getCachedNdefMessage().
  • Pour éviter les erreurs silencieuses, vous devez gérer toutes les exceptions lors des opérations de lecture/écriture.
  • Pour Android 12L et supérieur, une SecurityException peut être levée si l'objet Tag devient obsolète.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal