Rumah >Java >javaTutorial >Bagaimana untuk Menulis Rekod NDEF ke Teg NFC dengan API enableReaderMode Android?

Bagaimana untuk Menulis Rekod NDEF ke Teg NFC dengan API enableReaderMode Android?

Barbara Streisand
Barbara Streisandasal
2024-11-15 09:20:03394semak imbas

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

Cara Menulis Rekod NDEF ke Teg NFC Menggunakan API enableReaderMode

Pengenalan

Menulis rekod NDEF ke teg NFC memerlukan pendekatan berbeza dalam Android untuk memastikan kebolehpercayaan dan mengelakkan penulisan gagal. Sistem berasaskan Niat yang lebih lama sering membawa kepada isu akibat bacaan terganggu dan ralat senyap.

Menggunakan API enableReaderMode

API enableReaderMode yang lebih baharu menyediakan pendekatan yang lebih mantap. Ia melumpuhkan pemberitahuan sistem, membenarkan apl anda mengawal masa bunyi dan mengendalikan proses baca/tulis dengan cekap. Dengan berbuat demikian, anda boleh meminimumkan penulisan yang gagal dan rasuah data.

Kod Contoh

Coretan kod Java berikut menunjukkan cara menggunakan API enableReaderMode:

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

Tambahan Nota

  • Anda boleh membaca mesej NDEF cache dengan menggunakan mNdef.getCachedNdefMessage().
  • Untuk mengelakkan ralat senyap, anda harus mengendalikan semua pengecualian semasa operasi baca/tulis.
  • Untuk Android 12L dan ke atas, SecurityException boleh dilemparkan jika objek Tag menjadi basi.

Atas ialah kandungan terperinci Bagaimana untuk Menulis Rekod NDEF ke Teg NFC dengan API enableReaderMode Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn