我已经在我的应用程序代码中创建了一个 NFC 读/写部分,其中:
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”时,我的 message
变量(在读取带有该 URL 的标签后)只包含“google.com”。我不知道为什么 URL 的其余部分(“http://www.”)被删除/省略。你能告诉我这是怎么回事吗?我的错误在哪里?
最佳答案
您正在尝试将 NDEF 记录的有效负载解码为简单文本(UTF-8 编码字符串):
message = String(it.records[0].payload)
但是,您将 URL 写为 NFC 论坛 URI 记录:
NdefRecord.createUri(url)
因此,您需要根据 NFC 论坛 URI 记录类型定义规范(可从 NFC 论坛获取)来解释 URI 记录。这种 URI 记录的有效负载包含一个缩写字节(您可以使用它在定义明确的前缀表中查找 URI 前缀)和 URI 后缀(UTF-8 编码)。
您可以自己解析记录有效负载,也可以使用类似以下内容让 Android 为您施展魔法:
uriString = it.records[0].toUri()
关于android - 从 NFC 标签读取 URI 时丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46648453/