我将原始问题误认为是转换之一,当它是FormatException之一时。我正在尝试根据EditText输入编写NFC标签。相关代码如下:
EditText msgInput = (EditText) findViewById(R.id.editText1);
...
try {
String msg = msgInput.getText().toString();
byte[] bytes = msg.getBytes();
messagePayload = bytes;
}
...
NdefMessage message;
try {
message = new NdefMessage(messagePayload);
} catch (FormatException e) {
// ups, illegal ndef message payload
Log.e(TAG, "Format exception from illegal ndef message payload");
return;
}
它总是抛出FormatException。我不知道为什么。我只是想写'xyz'或'stuff'或类似的东西。我确保从每个日志之间的Log语句中获取正确的字节。
答案 0 :(得分:2)
仅提供字符串的字节不是有效的NdefMessage有效负载。这就是你得到例外的原因。要构建具有一个根据NFC论坛标准格式化的文本记录的正确NdefMessage,请使用以下代码:
String msg = msgInput.getText().toString();
byte[] languageCode;
byte[] msgBytes;
try {
languageCode = "en".getBytes("US-ASCII");
msgBytes = msg.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
return;
}
byte[] messagePayload = new byte[1 + languageCode.length
+ msgBytes.length];
messagePayload[0] = (byte) 0x02; // status byte: UTF-8 encoding and
// length of language code is 2
System.arraycopy(languageCode, 0, messagePayload, 1,
languageCode.length);
System.arraycopy(msgBytes, 0, messagePayload, 1 + languageCode.length,
msgBytes.length);
NdefMessage message;
NdefRecord[] records = new NdefRecord[1];
NdefRecord textRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
NdefRecord.RTD_TEXT, new byte[]{}, messagePayload);
records[0] = textRecord;
message = new NdefMessage(records);
有关NDEF协议的更多详细信息,请参阅此文档: https://engineering.purdue.edu/477grp14/Specs/NFC/NDEFTECH.pdf
有关RTD文本的更多详细信息,请查看以下内容: http://www.maintag.fr/fichiers/pdf-fr/nfcforum-ts-rtd-text-1-0.pdf