【问题标题】:android how to get the maximum size of NDEF message payload from reading a NFC tagandroid如何通过读取NFC标签来获取NDEF消息有效负载的最大大小
【发布时间】:2012-10-15 02:14:57
【问题描述】:

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

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

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

是否有任何方法可以获得最大负载大小?

任何帮助将不胜感激!

【问题讨论】:

    标签: android nfc ndef


    【解决方案1】:

    如果我理解正确,您想知道在 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)
    

    【讨论】:

      【解决方案2】:

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

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

      您可以使用getPayload 获取可变长度有效负载及其大小

      【讨论】:

      • 非常感谢您的回复。这很有帮助!我刚刚发现对于纯文本有效负载内容,实际有效负载从总标签内存的第 8 个字节开始,而对于 URL 有效负载内容,它将从第 6 个字节开始。所以我使用 ndef.getMaxSize() 减去相应的字节来获得最大有效负载大小。
      • 这不太对! NDEF 消息中“标头”数据的长度是可变的。具体来说,如果有效负载大于 255 个字节,则 sr 位未设置,长度字段变为 4 个字节长。设置 'il' 位也会发生类似的情况。
      猜你喜欢
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多