如何在android上读取受保护的ntag213数据响应

问题描述 投票:0回答:1

我正在编写一个移动应用程序(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
    }
android react-native nfc
1个回答
0
投票

我不是反应原生专家,但我认为你的问题是你正在调用一个不存在于

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 上

© www.soinside.com 2019 - 2024. All rights reserved.