将URL写入NFC芯片

时间:2015-10-20 23:49:19

标签: android format uri nfc ndef

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

网址如下所示:

www.%20google.ca

它实际上应该是这样的:

www.google.ca

下面的代码是我用来将URL写入芯片的写入功能:

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

这个问题有解决方法吗?

1 个答案:

答案 0 :(得分:0)

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

trim()

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

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

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

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);
}