私があなたを正しく理解しているなら、あなたは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)