// 如需读取 NDEF 数据,可进一步处理 res.ndefMessage
const ndefAdapter = nfcAdapter.getNdef()
// 连接 NFC 标签
ndefAdapter.connect({
success() {
console.log('连接 NFC 标签成功');
// 可以在这里进行读写操作
// 例如读取 ndefAdapter 消息
// 监听 Ndef 消息
ndefAdapter.onNdefMessage(message => {
Taro.showToast({
title: `接收到 Ndef 消息`,
icon: 'none',
})
console.log('接收到 Ndef 消息', message);
// 处理接收到的 Ndef 消息
// 例如解析消息内容
if (message && message.records && message.records.length > 0) {
message.records.forEach(record => {
console.log('Record ID:', record.id);
console.log('Record Type:', record.type);
console.log('Record Payload:', record.payload);
});
}
});
},
fail(err) {
console.error('连接 NFC 标签失败', err);
onNfcStateListener(` ${nfcErrorMsg[err.errCode]}`);
}
});
NFC卡支持NDEF,用其他小程序可以正常读取NDEF里面的记录,但是自己实现的话ndefAdapter.onNdefMessage一直没进,ndefAdapter已经连接成功了,这个是怎么回事?要怎么解决

不需要,ndef的消息相关内容已经在discover时返回
discoverHandler(res) { if (res.techs.includes(this.data.nfc.tech.ndef)) { console.log(res.messages); console.log('id:',this.arrybuffer2hexstr(res.id)); const payload=this.arrybuffer2hexstr(res.messages[0].records[0].payload); console.log('payload:',payload); const payload_arry=this.ArrayBufferToArray(res.messages[0].records[0].payload); this.parseNdefRecords(payload_arry); } if (res.techs.includes(this.data.nfc.tech.nfcA)) { const nfcA = this.data.nfc.getNfcA() this.setData({ nfc_nfcA:res }) } }, parseNdefRecords(bytes) { let index = 0; index++; let language = ""; for (let i = 0; i < 2; i++) { language += String.fromCharCode(bytes[index++]); } // 读取负载(保留原始换行符) let payload = ""; for (let i = 0; i < bytes.length-3; i++) { payload += String.fromCharCode(bytes[index++]); } console.log('payload sting:',payload); },我也遇到了同样的问题,试试直接从onDiscovered里的回调解析arrayBuffer,可能有的卡比较简单根本不需要连接啥的,data.messages[0].records[0].payload
Ndef.writeNdefMessage可以成功写入NDEF记录数据,就是onNdefMessage没法读取记录数据,这个是怎么回事,哪位大佬指导一下
1、NDEF记录内容格式正确,其他小程序可以正常解读
2、设置了超时时间为1秒,也不行
3、监听器是在连接成功后立即注册的
4、NFC权限都有,能正常读取