android如何通过读取NFC标签获取NDEF消息有效负载的最大大小

时间:2012-10-15 02:14:57

标签: android nfc ndef

我正在开发一个android应用程序来写入nfc标记的特定内存位置。 我需要通过读取NFC标签来获取NDEF消息有效负载的最大大小,以便我可以在该范围内定义内存位置。

我知道它可以通过以下代码获得整个ndef内存大小:

Ndef ndef = Ndef.get(tag); int size = ndef.getMaxSize();

有没有办法获得最大有效载荷大小?

任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:3)

如果我理解正确,您想知道您可以在NDEF消息中的单个NDEF记录中发送的最大数据量。

答案取决于您使用的NDEF记录格式。我正在使用外部记录类型,其末尾的有效负载只有一堆字节。据我所知,没有简单的方法来获取它,因为它将取决于你的个别域/类型字段长度,所以我实际创建一个“空”记录(实际上,其中有一些数据,以便得到更长的字段格式)然后从最大值中减去它的长度。

最大整体NDEF消息长度由兼容性容器指定,在第一次联系时从标记或设备读取,并且随标记的不同而不同。 Android允许我们使用ndefTag.getMaxSize();(其中ndefTag是您从意图中获得的标记)

这是我正在使用的方法(我允许不同的发送和接收长度):

//here we make some sample transmissions that we convert to work out the max length of data we can send
int test_payload_len = 300; //need to make this >255 to ensure the longer length field format is used
NdefMessage testDeviceNdef = new NdefMessage(NdefRecord.createExternal(CommandConsts.deviceDomain, CommandConsts.deviceType, test_data)); //the domain and type strings are defined elsewhere
NdefMessage testTerminalNdef = new NdefMessage(NdefRecord.createExternal(CommandConsts.terminalDomain, CommandConsts.terminalType, test_data));

maxNdefDeviceSendLength = ndefTag.getMaxSize() - (testDeviceNdef.getByteArrayLength() - test_payload_len); 
maxNdefTerminalSendLength = ndefTag.getMaxSize() - (testTerminalNdef.getByteArrayLength() - test_payload_len)

答案 1 :(得分:0)

规范允许的最大有效载荷大小为2 ^ 32-1

http://developer.android.com/reference/android/nfc/NdefRecord.html

您可以使用getPayload

获取可变长度的有效负载及其大小