如何为可变长度有效负载格式化NDEF消息?

时间:2016-12-01 14:28:21

标签: android nfc communication ndef

在我的应用程序中,我正在为NFC芯片编写许多测量值。随着测量次数的变化,我无法定义NDEF消息的确切长度,并且在NFC读取之前实现一个计算长度并写入有效负载长度的函数对于应用程序来说是不切实际的。

我想做的是将NDEF消息的大小设置为最大可用内存,然后简单地写入可用空间。但是,在使用NXP NFC扫描仪时,我收到的错误是我的内存不是NDEF格式的。谁能告诉我我做错了什么?

我目前的理解是:0x03定义ndef格式,0xFF标记3字节长度格式,0x373是可用长度,0xC5标识单个块的ME和MB,然后是0x00表示类型长度和前两个有效负载字节,最后 - 0x03和0x6D定义了0x36D有效负载长度。

初始化后的内存(开始和结束)如下所示: setDefaultLookAndFeelDecorated enter image description here

2 个答案:

答案 0 :(得分:0)

您应该在编写邮件时知道有效负载的大小。可以手动编写NDEF代码,但是您需要为消息中的每条记录包含TNF,类型和有效负载。

我建议使用NdefRecordNdefMessage对有效负载进行编码并创建消息。如果在以后您拥有不同大小的不同有效负载,请创建新消息并将其写入标记。当您向标记写入消息时,它会覆盖以前的消息。

答案 1 :(得分:0)

使用Android Ndef.getMaxSize()方法确定可用的最大大小。然而,这需要实际写入虚拟数据。

更优化的方法是只编写NDEF头,然后在更多数据进入时修改它。如果是这样,你应该注意到NDEF消息iself在实际上是以简单的容器样式格式包装的标签。因此,您必须不止一次更新长度。

参见例如NFCTools