我已经创建了应用程序代码的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。")被删除/省略。你能告诉我发生了什么吗?我的错误在哪里?
答案 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()