从 NFC 标签读取 URI 时丢失数据

Missing data when reading URI from NFC tag

我已经在我的应用程序代码中创建了 NFC read/write 部分,其中:

READ 负责处理数据并触发网络浏览器:

ndef.connect()
val ndefMessage = ndef.ndefMessage
if (ndefMessage.records != null && ndefMessage.records.isNotEmpty()) {
   message = String(it.records[0].payload)
}
ndef.close()

WRITE 将 URL 写入 NFC 标签:

ndef.connect()
val mimeRecord = NdefRecord.createUri(url)
ndef.writeNdefMessage(NdefMessage(mimeRecord))
ndef.close()

出于某种神秘原因,当我写 URL“http://www.google.com", my my message variable (after reading a tag with that URL) contains only "google.com". I have no idea why the rest of the URL ("http://www”时,是 removed/ommited。你能告诉我这是怎么回事吗?我的错误在哪里?

您正在尝试将 NDEF 记录的有效负载解码为简单文本(UTF-8 编码字符串):

message = String(it.records[0].payload)

但是,您将 URL 写为 NFC 论坛 URI 记录:

NdefRecord.createUri(url)

因此,您需要根据NFC Forum URI Record Type Definition规范(可从NFC Forum获取)来解释URI记录。此类 URI 记录的有效负载包含一个缩写字节(您可以使用它在 table 明确定义的前缀中查找 URI 前缀)和 URI 后缀(UTF-8 编码)。

您可以自己解析记录负载,也可以使用类似以下内容让 Android 为您施展魔法:

uriString = it.records[0].toUri()