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

Posted

技术标签:

【中文标题】如何为可变长度有效负载格式化 NDEF 消息?【英文标题】:How to format an NDEF message for a variable length payload? 【发布时间】:2016-12-01 14:28:20 【问题描述】:

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

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

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

初始化后的内存(开始和结束)如下图所示:

【问题讨论】:

如何创建和编写 NDEF 消息?您是使用 android 内置的方法,还是您自己的方法? 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

更理想的方法是只编写 NDEF 标头,然后在有更多数据进入时对其进行修改。如果是这样,您应该注意,NDEF 消息本身在实际位于标签。所以你必须不止一次地更新长度。

例如见NFCTools

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。

以上是关于如何为可变长度有效负载格式化 NDEF 消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 POST 请求创建 json 有效负载?

如何为复杂的 Json 有效负载设置属性及其值并进行序列化?

如何为炮兵负载测试设置代理 url?

Firebase Cloud Messaging to Android 工作,但 iOS 失败。如何为 iOS 构建有效负载?

如何为 WhatsApp 的 .crypt12 格式生成页眉和页脚?

web调用IC卡读卡器开发第七章--NFC标签NDEF数据