gpt4 book ai didi

java - 参数中的 NdefRecord.createMime 错误

转载 作者:行者123 更新时间:2023-12-01 10:25:31 25 4
gpt4 key购买 nike

我有一个方法可以将数据写入发现的 NFC 标签(数据来自记录数组 toWriteRecordsList)。

// ... more up here ...
for (String record : toWriteRecordsList) {
String[] recordArr = record.split(":");
// I verified the recordArr contained the correct data
try {
// This line writes 'text/plain' as the message/payload
//records[currentRecord] = NdefRecord.createMime("text/plain", recordArr[1].getBytes("US-ASCII"));
// This line works as intended...¯\_(ツ)_/¯
records[currentRecord] = NdefRecord.createMime(recordArr[1], "text/plain".getBytes());
} catch (Exception e ) {
e.printStackTrace();
}
currentRecord++;
}
// ... actual writing down here ...

奇怪的是,当我使用 NdefRecord.createMime 方法作为 docs 时然后指定编码消息,当显示在 Android 默认标签应用程序(“标签收集器”)中时,无论第一个参数是什么(在这种情况下,手机打印的消息是“文本/纯文本”!)

createMime() 肯定具有此签名时:

public static NdefRecord createMime (String mimeType, byte[] mimeData)

因为这对我来说太奇怪了,所以我交换了参数(包括调用 .getBytes() 来满足原型(prototype))并且它成功了!我在两个不同的设备(Galaxy Nexus 和 Galaxy S4)上尝试过此操作,并得到了相同的行为。

我找不到任何 Android bug 的记录,所以我想我做错了什么。这到底是怎么回事?

最佳答案

NdefRecord.createMime(...) 方法没有任何问题。 Android 默认的“标签”应用程序通过显示 MIME 类型的名称而不是其负载来显示 MIME 类型记录。因此,应用程序正确显示 createMime() 方法的第一个参数(即类型名称)。

显示 MIME 类型记录的有效负载需要标记应用根据类型名称解码记录有效负载,而此应用根本不执行此操作。请参阅 Tag 应用中 MIME 记录的 getView() 方法的源代码:MimeRecord.java:59 .

请注意,如果您希望标签应用显示存储在 NDEF 记录中的文本,您可以使用 NFC 论坛文本记录类型:

NdefRecord r = NdefRecord.createTextRecord("en", recordArr[1]);

或者对于 API 级别 21 之前的 Android:

public static NdefRecord createTextRecord(String language, String text) {
byte[] languageBytes;
byte[] textBytes;
try {
languageBytes = language.getBytes("US-ASCII");
textBytes = text.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
throw new AssertionError(ex);
}

byte[] recordPayload = new byte[1 + (languageBytes.length & 0x03F) + textBytes.length];

recordPayload[0] = (byte)(languageBytes.length & 0x03F);
System.arraycopy(languageBytes, 0, recordPayload, 1, languageBytes.length & 0x03F);
System.arraycopy(textBytes, 0, recordPayload, 1 + (languageBytes.length & 0x03F), textBytes.length);

return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, null, recordPayload);
}

NdefRecord r = createTextRecord("en", recordArr[1]);

关于java - 参数中的 NdefRecord.createMime 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35376026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com