java - 创建 NdefMessage 时出现 FormatException

标签 java android nfc ndef

我把原来的问题误认为是转换问题,而它是 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”或“东西”或类似的东西。我确保从每个之间的 Log 语句中获取正确的字节。

最佳答案

仅给出字符串的字节不是有效的 NdefMessage 有效负载。这就是为什么你会得到异常(exception)。要使用根据 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 协议(protocol)的更多详细信息,请参阅此文档: https://engineering.purdue.edu/477grp14/Specs/NFC/NDEFTECH.pdf

有关文本 RTD 的更多详细信息,请参阅此: http://www.maintag.fr/fichiers/pdf-fr/nfcforum-ts-rtd-text-1-0.pdf

关于java - 创建 NdefMessage 时出现 FormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11636025/

相关文章:

android - 如何检测NFC标签移除事件?

android - 需要应用程序在运行和关闭时检测 nfc

java - 回文质数,比较反转数

java - 将两个数组合并为一个按升序排列的数组无法正常工作。 java

java - @Pattern , JSR303 bean 验证 : regex check max 5 words and not blank

android - 如何从 Activity 返回到上一个 fragment ?

安卓 NFC : Can we uniquely identify the NFC beam of each mobile device?

java - 使用 EAR 库配置 Helios WTP 实用程序项目的构建路径

android - Android 中的 AdMob Facebook 中介无法正常工作

java - 如何根据方向旋转标记(总线)?