【发布时间】:2016-08-25 19:58:52
【问题描述】:
我是 Xamarin 以及 Android 开发的新手。我有一个 NFC 标签,特别是 ST M24LR64E,上面有数据。我可以使用 Google Play 上的 ST 应用程序查看数据块。在我的 Xamarin 应用程序中,我无法在没有收到 TagLostException 的情况下向标签发送消息。我可以毫无问题地查询标签 ID,但是尝试读取单个数据块时,我得到了异常。任何方向将不胜感激。
byte[] response = new byte[] { 0x0A };
byte[] cmd = new byte[]
{
(byte) 0x26,
(byte) 0x01,
0x00
};
response = nfcv.Transceive(cmd);
byte[] single = new byte[]
{
(byte) 0x40, // FLAGS
(byte) 0x20, // READ_SINGLE_BLOCK
0, 0, 0, 0, 0, 0, 0, 0,
(byte) (0 & 0x0ff)
};
Array.Copy(id, 0, single, 2, 8);
response = nfcv.Transceive(single);
第一个 Transceive() 没问题,我看到 10 个字节回来了。一旦我尝试读取一个数据块,我就会得到 TagLostException。
【问题讨论】:
-
您似乎从我的回答中复制了 READ_SINGLE_BLOCK 命令(请参阅here)。不幸的是,该答案中使用的标志字节是错误的。您应该使用 0x20(而不是 0x40)来指示寻址版本。我假设
id包含从tag.GetId()(或nfcv.GetTag().GetId())获得的标签UID。 -
Android 已经为您执行了 INVENTORY 请求,因此无需重新发出该请求。可以通过
NfcV对象的inventory请求获取Android获取的所有信息。 -
谢谢@MichaelRoland - 但是将标志更改为 0x20 仍然会产生标签丢失异常。
标签: android xamarin tags nfc iso-15693