2

nfcタグの特定のメモリ位置に書き込むためのAndroidアプリケーションを開発しています。また、NFCタグの読み取りからNDEFメッセージペイロードの最大サイズを取得して、その範囲内でメモリの場所を定義できるようにする必要があります。

以下のコードでndefメモリサイズ全体を取得できることを知っています。

Ndef ndef = Ndef.get(tag); int size = ndef.getMaxSize();

最大ペイロードサイズを取得する方法はありますか?

どんな助けでも大歓迎です!

4

2 に答える 2

5

私があなたを正しく理解しているなら、あなたはNDEFメッセージの単一のNDEFレコードで送信できるデータの最大量を知りたいと思うでしょう。

答えは、使用しているNDEFレコードの形式によって異なります。私は、最後にほんの数バイトのペイロードを持つ外部レコードタイプを使用しています。私の知る限り、これを取得する簡単な方法はありません。これは、個々のドメイン/タイプのフィールドの長さに依存するため、実際に「空の」レコードを作成します(実際には、より長いフィールド形式を取得します)、最大値からその長さを減算します。

全体的なNDEFメッセージの最大長は、互換性コンテナによって指定され、最初の接触時にタグまたはデバイスから読み取られます。これはタグごとに異なります。Androidではそれを取得できます(インテントから取得したタグは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)
于 2013-05-05T06:44:32.783 に答える
0

仕様で許可されている最大ペイロードサイズは2^32-1です

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

getPayloadを使用して、可変長ペイロードとそのサイズを取得できます

于 2012-10-15T02:20:35.413 に答える