【问题标题】:Writing URL to NFC chip将 URL 写入 NFC 芯片
【发布时间】:2015-10-20 23:49:18
【问题描述】:

我正在编写一个指向 NFC 标签的 URL(在 URI 记录中)。我的问题是读取芯片时,“www”后面加了“%20”。在 URL 的其余部分之前。

网址如下所示:

www.%20google.ca

什么时候应该是这样的:

www.google.ca

下面的代码是我用来将URL写入芯片的write函数:

String copy = txtTagContent.getText().toString();
byte[] uriField = copy.getBytes(Charset.forName("US-ASCII"));
byte[] payload = new byte[uriField.length + 1];              //add 1 for the URI Prefix
payload[0] = 0x01;                                      //prefixes http://www. to the URI
System.arraycopy(uriField, 0, payload, 1, uriField.length);  //appends URI to payload
NdefRecord rtdUriRecord = new NdefRecord(
        NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
NdefMessage message = new NdefMessage(rtdUriRecord);
Ndef ndef = Ndef.get(tag);
ndef.connect();
ndef.writeNdefMessage(message);
ndef.close();

这个问题有解决办法吗?

【问题讨论】:

  • 你所说的“芯片”是什么意思?

标签: android format uri nfc ndef


【解决方案1】:

您将 URI 记录写入 NFC 标签的方法和接收方都不会在您的 URL 中神奇地添加一个空格 (%20)。从“http://www”开始。由前缀字节 (0x01) 指定,空格可能已输入到文本字段 (txtTagContent)。您可以使用 trim() 方法简单地删除任何前导和尾随空格:

String copy = txtTagContent.getText().toString().trim();

您可能还想考虑已经包含特定前缀的 URL 字符串:

byte prefixByte = (byte)0x01;
if ("http://www.".equals(copy)) {
    prefixByte = (byte)0x01;
    copy = copy.substr(11);
} else if ("https://www.".equals(copy)) {
    prefixByte = (byte)0x02;
    copy = copy.substr(12);
} else if ("http://".equals(copy)) {
    prefixByte = (byte)0x03;
    copy = copy.substr(7);
} else if ("https://".equals(copy)) {
    prefixByte = (byte)0x04;
    copy = copy.substr(8);
}

最后,请注意 URI 记录中的 URL 必须是 UTF-8 编码(而不是您当前使用的 US-ASCII):

byte[] uriField = copy.getBytes(Charset.forName("UTF-8"));
byte[] payload = new byte[uriField.length + 1];
payload[0] = prefixByte;
System.arraycopy(uriField, 0, payload, 1, uriField.length);
NdefRecord rtdUriRecord = new NdefRecord(
        NdefRecord.TNF_WELL_KNOWN,
        NdefRecord.RTD_URI,
        new byte[0],
        payload);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多