2015-10-20 136 views
2

我正在寫一個URL標籤(位於URI記錄內)。我的問題是,當我讀取芯片時,「www。」後面添加了「%20」。並在URL的剩餘部分之前。將URL寫入NFC芯片

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

有沒有解決這個問題的方法?

+0

「芯片」是什麼意思? –

回答

0

無論是將URI記錄寫入NFC標籤還是接收端,都不會在您的URL中添加空格(%20)。由於「http://www」。由前綴字節(0x01)指定時,空格可能輸入到文本字段(txtTagContent)中。

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

你也許可能還需要考慮到已經包含了一定的前綴URL字符串:你可以使用trim()方法簡單地刪除任何開頭和結尾的空白

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