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 } } } } }
Notes supplémentaires
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!