nfc-a 协议是14443-a属于isodep的协议。所以一般卡抛出的tag中会包含 nfca和isodep2个tag 。只需要把使用isodep进行连接和发送数据接口。 如果偏偏要使用nfc-a,需要底层的一些设置,不知道怎么搞。我是用isodep成功的,pc的软件是使用nfc-a。
为什么NfcA.transceive发送数据返回13017?如题,大致流程是先调用wx.getNFCAdapter,然后调用adapter.startDiscovery,然后调用adapter.onDiscovered,然后调用nfcA.connect,然后调用nfcA.transceive,此时返回13017错误。 基础库版本:2.14.1 Android版本:10 手机型号:一加5t NFC相关代码如下: NFCReadCard: function(){ let _this = this let adapter = wx.getNFCAdapter() console.log(adapter) adapter.startDiscovery({success:(e)=>{ console.log('开始监听贴卡',e) adapter.onDiscovered(function (res){ console.log('读到卡片了', res); //console.log(res.techs); if(res.techs.includes(adapter.tech.nfcA)){ console.log('发现'+adapter.tech.nfcA+'卡'); let nfcA = adapter.getNfcA(); app.nfcA = nfcA; nfcA.connect({ success: function(res){ console.log('设备已连接', res) // nfcA.getAtqa({ // success: function(res){ // console.log('Atqa', res) // } // }); // nfcA.getSak({ // success: function(res){ // console.log('Sak', res) // } // }); nfcA.isConnected({ success: function(res){ console.log('Connected') } }); // let byteArr = [0x00, 0xa4, 0x00, 0x00, 0x02, 0xdf, 0x01] // let byteArrBuffer = new Uint8Array(byteArr).buffer let dataBytes = [0x00, 0x84, 0x00, 0x00, 0x02] let dataBuffer = new Uint8Array(dataBytes).buffer nfcA.transceive({ // data:new ArrayBuffer(0), data: dataBuffer, success: function(res){ console.log('发送数据成功, 接收数据如下:', res); }, fail: function(err){ console.log('发送数据失败', err); } }) }, fail: function(err){ console.log('设备联接错误', err); } }); } }) }}) }
2021-07-06