我对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编码文本写入标签吗? 我真的迷失了。谢谢你的帮助
答案 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);