Heim >Java >javaLernprogramm >Wie schreibe ich NDEF-Datensätze mit der enableReaderMode-API von Android in NFC-Tags?

Wie schreibe ich NDEF-Datensätze mit der enableReaderMode-API von Android in NFC-Tags?

Barbara Streisand
Barbara StreisandOriginal
2024-11-15 09:20:03394Durchsuche

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

So schreiben Sie NDEF-Datensätze auf NFC-Tags mithilfe der API „enableReaderMode“

Einführung

Das Schreiben von NDEF-Datensätzen auf NFC-Tags erfordert ein anderer Ansatz in Android, um Zuverlässigkeit sicherzustellen und fehlgeschlagene Schreibvorgänge zu vermeiden. Das ältere Intent-basierte System führte häufig zu Problemen aufgrund unterbrochener Lesevorgänge und stiller Fehler.

Verwendung der „enableReaderMode“-API

Die neuere „enableReaderMode“-API bietet einen robusteren Ansatz. Dadurch werden Systembenachrichtigungen deaktiviert, sodass Ihre App das Timing von Tönen steuern und den Lese-/Schreibvorgang effizient durchführen kann. Auf diese Weise können Sie fehlgeschlagene Schreibvorgänge und Datenbeschädigungen minimieren.

Beispielcode

Der folgende Java-Codeausschnitt zeigt, wie die API „enableReaderMode“ verwendet wird:

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
                }
            }
        }
    }
}

Zusätzliche Hinweise

  • Sie können die zwischengespeicherte NDEF-Nachricht lesen, indem Sie mNdef.getCachedNdefMessage() verwenden.
  • Um stille Fehler zu vermeiden, sollten Sie dies tun Behandeln Sie alle Ausnahmen während Lese-/Schreibvorgängen.
  • Für Android 12L und höher kann eine SecurityException ausgelöst werden, wenn das Tag-Objekt veraltet ist.

Das obige ist der detaillierte Inhalt vonWie schreibe ich NDEF-Datensätze mit der enableReaderMode-API von Android in NFC-Tags?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn