mifareClassic.transceive({ data: arrayBuffer02, success: function(res) { let that = this let str01 = "" let data = Array.from(new Uint8Array(res.data)); data.forEach(e => { let item = e.toString(16)//转16进制字符串 if (item.length == 1) { item = '0' + item } item = item.toUpperCase() // console.log(item) str01 += item }) console.log('读取数据成功', res, str01,Array.from(new Uint8Array(res.data))); that.setData({ blockdata:str01 }) }, fail (err) { console.log('读取数据失败', err); }, // complete(){ // mifareClassic.close({ // success(){ // console.log("关闭成功") // } // }) // } }) 我这里str01的值怎么传到页面呀
this.setData的问题?[图片] [图片] 如上图,为什么this.setData没起到作用
2022-05-30解决了
MifareClassic.transceive 如何读写?微信小程序的文档上好像提到了 对于MifareClassic的分块读写 指令 0x30 + 块号 可以用于读取某个块的数据指令 0xA0 + 块号 + 待写入数据 可以用于往某个块写入数据https://developers.weixin.qq.com/miniprogram/dev/api/device/nfc/MifareClassic.html 在搜索卡的过程中,能看到命令行打印的日志是支持 MifareClassic的 但是我们在读数据的时候遇到了问题,按道理来说下面的代码应该读取到一块的数据,但是每次不管是读什么卡返回的都是 0x04 (请问是不是读取卡片之前,还需要其它的命令,例如授权,希望有大神可以出来指点一下) const READ_FIRST = '3000' // 十六进制命令字符串 读取第一块的数据 var adapter = null async function testNFC() { adapter = wx.getNFCAdapter() console.log('wx.getNFCAdapter', adapter) initAdapter(adapter) try { // 小程序api promise化的帮助函数 let res = await utils.apiPromise(adapter.startDiscovery) console.log('startDiscovery', res) } catch (e) { console.log(e) utils.showMsg('nfc识别失败,错误码' + e.errCode + `错误信息:${e.errMsg}`) } } function initAdapter(adapter) { // 监听发现卡片的事件 adapter.onDiscovered(async function (card) { console.log('onDiscovered', card) adapter.stopDiscovery() adapter.offDiscovered() let res = {} const instance = adapter.getMifareClassic() instance.connect({ success: async res => { let res1 = {} res1 = await runCommand(instance, READ_FIRST) // read first console.log(res1) }, fail: e => console.error(e) }) }) } function runCommand(instance, command) { console.log('runCommand', command) if (typeof command === 'string') { // 十六进制字符转ArrayBuffer 此函数不在此处列出 command = hexStringToArrayBuffer(command) } return new Promise(function(resolve, reject) { instance.transceive({ data: command, success: res => { // buffer 转十六进制字符串的函数 不在此处列出 console.log('runCommand success:', res, buf2hex(res.data)) resolve( buf2hex(res.data) ) }, fail: err => { console.log('runCommand error:', err) reject(err) } }) }) }
2022-05-30