从NFC标签

时间:2017-10-09 14:08:35

标签: android tags uri nfc ndef

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

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

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()

出于某些神秘的原因,当我写下网址" http://www.google.com"时,我的message变量(在阅读带有该网址的标记后)仅包含" google .COM&#34 ;.我不知道为什么网址的其余部分(" http://www。")被删除/省略。你能告诉我发生了什么吗?我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

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

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

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

NdefRecord.createUri(url)

因此,您需要根据NFC论坛URI记录类型定义规范(来自NFC论坛的avaibale)解释URI记录。这种URI记录的有效负载包含一个缩写字节(可用于在明确定义的前缀表中查找URI前缀)和URI后缀(UTF-8编码)。

您既可以自己解析记录有效负载,也可以通过以下方式让Android为您带来魔力:

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