2017-10-09 129 views
1

我創建了一個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。」)被刪除/忽略。你能告訴我發生了什麼事嗎?我的錯誤在哪裏?

+0

爲了澄清,你正在寫的變量'url'的標籤,其中有價值'http:// www.google.com',當你閱讀它時,返回只是'google.com'?你有沒有嘗試過其他的網址?查看URL的創建位置可能會有所幫助。 – WoogieNoogie

+0

是的,現在它在你寫作的時候非常有效。是的,我嘗試了不同的URL - 沒有區別tho:CI從'EditText'小部件讀取URL並將其傳遞給我的'TagManager' – JakubW

+0

我不能把它作爲答案,因爲它更多的是理論,但NFC信息必須簡潔明瞭。 Ndef庫很有可能會故意縮短網址,如果它以'http:// www'開頭,那麼這是一種「默認」URI。 – WoogieNoogie

回答

1

您正試圖將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()