2012-10-15 57 views
0

我正在開發一個android應用程序來寫入nfc標籤的特定內存位置。 我需要通過讀取NFC標籤來獲得NDEF消息有效載荷的最大尺寸,以便我可以在該範圍內定義存儲位置。android如何從讀取NFC標籤獲得NDEF消息有效載荷的最大尺寸

我知道這是可以通過下面的代碼來獲取整個NDEF內存大小:

NDEF NDEF = Ndef.get(標籤); int size = ndef.getMaxSize();

有沒有辦法獲得最大有效載荷大小?

任何幫助將不勝感激!在規範允許的

回答

0

最大有效載荷大小爲2^32-1

http://developer.android.com/reference/android/nfc/NdefRecord.html

你可以得到可變長度的有效載荷,其大小與getPayload

+1

謝謝非常感謝您的回覆。這很有幫助!我剛剛發現,對於明文有效載荷內容,實際有效載荷從總標記內存的第8個字節開始,對於URL有效載荷內容,它將從第6個字節開始。所以我使用了ndef.getMaxSize()減去這些字節來獲得最大的有效載荷大小。 –

+0

這不太對勁! NDEFmessage中'header'數據的長度是可變的。具體地說,如果有效載荷大於255字節,則sr位不設置,並且長度字段變爲4字節長。也有類似的情況發生在'il'位被設置。 – Sam

3

如果我理解正確的話,您想知道您可以在NDEF消息中的單個NDEF記錄中發送的最大數據量。

答案取決於您正在使用的NDEF記錄格式。我使用的外部記錄類型在最後只有一堆字節的有效載荷。據我所知,沒有簡單的方法來獲得這個,因爲它取決於你的個人領域/類型字段長度,所以我實際上創建了一個'空'記錄(實際上其中有一些數據是爲了得到更長的字段格式),然後從最大值中減去其長度。

最大整體NDEF消息長度由兼容性容器指定,從首次聯繫的標籤或設備讀取,並且這因標籤而異。安卓讓我們獲得與ndefTag.getMaxSize();(其中ndefTag是你的意圖得到了標籤)

這裏是我使用的方法(我已經允許不同的發送和接收的長度):

//here we make some sample transmissions that we convert to work out the max length of data we can send 
int test_payload_len = 300; //need to make this >255 to ensure the longer length field format is used 
NdefMessage testDeviceNdef = new NdefMessage(NdefRecord.createExternal(CommandConsts.deviceDomain, CommandConsts.deviceType, test_data)); //the domain and type strings are defined elsewhere 
NdefMessage testTerminalNdef = new NdefMessage(NdefRecord.createExternal(CommandConsts.terminalDomain, CommandConsts.terminalType, test_data)); 

maxNdefDeviceSendLength = ndefTag.getMaxSize() - (testDeviceNdef.getByteArrayLength() - test_payload_len); 
maxNdefTerminalSendLength = ndefTag.getMaxSize() - (testTerminalNdef.getByteArrayLength() - test_payload_len) 
相關問題