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

标签 android tags uri nfc ndef

我已经在我的应用程序代码中创建了一个 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/

相关文章:

android - 如何在 Adapter getView 中使用之前检查 View 是否属于合适的类型

android - 适用于 cordova 2.3.0 android 的 ExtractZipFile

android - 如何从相机 Intent 中捕捉视频?

javascript - 如何在插入 jQuery 后更新/刷新 DOM 项

ruby-on-rails - 使用 Ruby on Rails 创建一个类似于 Stack Overflow 的标签输入框

html - 在XHTML文档的grails中使用JSOUP获取两个不同标签之间的文本

java - 创建 Uri 对象时出错

android - 开关按钮始终打开

rest - 连字符、下划线或驼峰命名法作为 URI 中的单词分隔符?

ansible - 如何检查ansible playbook中的状态代码