丢失数据从NFC标签
问题描述:
我创建了一个NFC读取URI时读我的应用程序代码,其中/写部分:丢失数据从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
变量(读取标签与后网址)只包含“google.com”。我不知道为什么网址的其余部分(“http://www。”)被删除/忽略。你能告诉我发生了什么事吗?我的错误在哪里?
答
您正试图将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()
为了澄清,你正在写的变量'url'的标签,其中有价值'http:// www.google.com',当你阅读它时,返回只是'google.com'?你有没有尝试过其他的网址?查看URL的创建位置可能会有所帮助。 – WoogieNoogie
是的,现在它在你写作的时候非常有效。是的,我尝试了不同的URL - 没有区别tho:CI从'EditText'小部件读取URL并将其传递给我的'TagManager' – JakubW
我不能把它作为答案,因为它更多的是理论,但NFC信息必须简洁明了。 Ndef库很有可能会故意缩短网址,如果它以'http:// www'开头,那么这是一种“默认”URI。 – WoogieNoogie