收藏
回答

Ndef.onNdefMessage(function callback) 回调函数一直没进?

// 如需读取 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已经连接成功了,这个是怎么回事?要怎么解决


回答关注问题邀请回答
收藏

5 个回答

  •  间の
     间の
    2025-08-22

    不需要,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);
    },
    
    2025-08-22
    有用
    回复
  • 忧郁阳光
    忧郁阳光
    2025-08-12

    我也遇到了同样的问题,试试直接从onDiscovered里的回调解析arrayBuffer,可能有的卡比较简单根本不需要连接啥的,data.messages[0].records[0].payload

    2025-08-12
    有用
    回复
  • 呃哦
    呃哦
    2025-07-06

    Ndef.writeNdefMessage可以成功写入NDEF记录数据,就是onNdefMessage没法读取记录数据,这个是怎么回事,哪位大佬指导一下

    2025-07-06
    有用
    回复 1
    • 柠檬🍋西柚
      柠檬🍋西柚
      2025-09-19
      想问一下,解决了吗,我也遇到类似的问题
      2025-09-19
      回复
  • 呃哦
    呃哦
    2025-07-06

    1、NDEF记录内容格式正确,其他小程序可以正常解读

    2、设置了超时时间为1秒,也不行

    3、监听器是在连接成功后立即注册的

    4、NFC权限都有,能正常读取

    2025-07-06
    有用
    回复
  • 智能回答 智能回答 该问答由AI生成
    2025-07-06
    有用
登录 后发表内容