我正在编写一个移动应用程序(react-native)来使用react-native-nfc-manager库在ntag213上读取/写入数据(读/写保护)
我使用读取命令0x30,后跟页面地址(例如0x60)
在 IOS (sendMifareCommandIOS) 上,当我显示响应时,它正确返回 16 字节数组
但是在android(收发)上,它显示“[Function Anonymous]”
有谁知道我如何在android上实际读取数据?
更新 这是我在新的 ntag213 贴纸上设置读/写保护的初始代码
await NfcManager.sendMifareCommandIOS([0x1B,0xFF,0xFF,0xFF,0xFF]); //auth (default password)
await NfcManager.sendMifareCommandIOS([0xA2,0x2B,0xAA,0xBB,0xCC,0xDD]); //set new password
await NfcManager.sendMifareCommandIOS([0xA2,0x2C,0x11,0x22,0x33,0x44]); //set acknowledgement (PACK)
await NfcManager.sendMifareCommandIOS([0xA2,0x29,0x04,0x00,0x00,0x04]); //protect address from (0x04)
await NfcManager.sendMifareCommandIOS([0xA2,0x2A,0x80,0x00,0x00,0x00]); //enable read/write protection (0x80)
这就是我在0x06页写入一些数据的方式
function fn(){
if(Platform.OS === 'ios'){
return NfcManager.sendMifareCommandIOS
}else{
return NfcManager.transceive
}
}
async function writeData(){
var resp = await fn([0x1B,0xAA,0xBB,0xCC,0xDD]); //correct password
var txt = "abcd"
await fn([0xA2,0x06,txt.charCodeAt(0),txt.charCodeAt(1),txt.charCodeAt(2),txt.charCodeAt(3)]); //write page 0x06
}
这就是我读取数据的方式
function fn(){
if(Platform.OS === 'ios'){
return NfcManager.sendMifareCommandIOS
}else{
return NfcManager.transceive
}
}
async function readData(){
await fn([0x1B,0xAA,0xBB,0xCC,0xDD]); //correct password
var r = await fn([0x30,0x06]); //read page 0x06
console.log(r); //android displays [function anonymous], ios correctly displays 16 byte array
}
我不是反应原生专家,但我认为你的问题是你正在调用一个不存在于
NfcManager
中的方法(收发)
似乎
NfcManager
有一些快捷方法可以为您获取正确 NFC 技术的处理程序方法,适用于某些(但不是所有)技术。
不提供任何NFCA技术的快捷方法。
我会阅读react-native-nfc-manager库文档概念部分
通常您会获得一个 NfcA 处理程序并用其进行收发。
Ntag213 不是 Mifare 标签,它是 NfcA 标签。
例如
NfcManager.NfcAHandler.transceive([0x30,0x06])
在 iOS 中,所有 NfcA 标签都是 Mifare 标签是一个错误的假设 - 它们不是。 (所有 Mifare 标签都是 NFCA 标签)
该库的 NfcAHandler 部分解决了错误的 iOS 假设,因此您可以
NfcAHandler.transceive
在 Android 和 iOS 上