在Android 13上,写入标签后,需要一些延迟才能成功读取标签消息。而且,在确定标签写入完成后,您应该使用异步任务来读取标签消息。以下是一个示例代码:
//写入标签消息 private void writeTag(NdefMessage message, Tag tag) { try { Ndef ndef = Ndef.get(tag); if (ndef != null) { ndef.connect(); ndef.writeNdefMessage(message); ndef.close(); } else { NdefFormatable format = NdefFormatable.get(tag); if (format != null) { format.connect(); format.format(message); format.close(); } else { Log.d(TAG, "Tag doesn't support NDEF."); } } } catch (Exception e) { Log.d(TAG, "Write error: " + e.getMessage()); } }
//读取标签消息 private void readTag(Intent intent) { Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMsgs != null) { NdefMessage[] msgs = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { msgs[i] = (NdefMessage) rawMsgs[i]; } // 处理标签消息 handleNfcNdefMessage(msgs); } else { new Handler().postDelayed(new Runnable() { //添加延迟 @Override public void run() { readTag(getIntent()); } }, 100); } }
在代码中,我们添加了一个延迟100ms的异步任务来读取标签消息。此时,getParcelableArrayExtra应该能够正常返回标签的消息。