标签大小/编码行为

时间:2017-10-03 22:25:23

标签: android encoding nfc

我对Android NFC编程很陌生,我购买了恩智浦MIFARE Ultralight NTAG216 标签。它们包含 886 免费字节。在我的应用程序中,我使用以下

编写标签
public void write(String text, Tag tag) throws IOException, FormatException {
    NdefRecord[] records = { createRecord(text) };
    NdefMessage message = new NdefMessage(records);
    Ndef ndef = Ndef.get(tag);
    ndef.connect();
    ndef.writeNdefMessage(message);
    ndef.close();
}

private NdefRecord createRecord(String content) throws UnsupportedEncodingException {
    String lang = "en";
    byte[] textBytes = content.getBytes();
    byte[] langBytes = lang.getBytes("US-ASCII");
    int langLength = langBytes.length;
    int textLength = textBytes.length;

    byte[] payload = new byte[1 + langLength + textLength];
    payload[0] = (byte) langLength;

    System.arraycopy(langBytes, 0, payload, 1, langLength);
    System.arraycopy(textBytes, 0, payload, 1 + langLength, textLength);

    NdefRecord recordNFC = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], payload);
    return recordNFC;
}

我需要大约600个字符才能在标签上存储我想要的内容。 问题是,如果没有这条线冻结我就不能写超过254个字符(它不会抛出异常,只是试着写)

ndef.writeNdefMessage(message);

使用名为NFC Tools的应用程序,我可以看到我使用了254/886字节的可用数据。我不能使用App在标签上写更多内容,它也会冻结。

我认为这是一个编码问题所以我查看了Android文档Link,看起来你只能在标签上编写UTF-8编码数据。也许编写ASCII编码数据可以节省更多空间。

Android是否限制了您可以写入的字节数? 这是编码问题吗?我可以直接将ASCII编码文本写入标签吗? 我真的迷失了。谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

这不是Android设置的限制,但可能是与设备相关的错误。我遇到了与Ulefone Armor 2(运行Android 7.0,内核4.4.15)类似的问题。其他设备上没有出现此问题。

关于你关于编码为ASCII的评论。 Android还允许使用ASCII编码NDEF记录内容,如下所示:

  byte[] dataBytes = token.getBytes(StandardCharsets.US_ASCII);
  byte[] mimeBytes = VALIDATION_TAG_MIME_TYPE.getBytes(StandardCharsets.US_ASCII);
  NdefRecord nfcRecord = new NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, mimeBytes, null, dataBytes);