我正在开发一个android应用程序来写入nfc标记的特定内存位置。 我需要通过读取NFC标签来获取NDEF消息有效负载的最大大小,以便我可以在该范围内定义内存位置。
我知道它可以通过以下代码获得整个ndef内存大小:
Ndef ndef = Ndef.get(tag); int size = ndef.getMaxSize();
有没有办法获得最大有效载荷大小?
任何帮助都会非常感激!
答案 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
获取可变长度的有效负载及其大小