gpt4 book ai didi

android - 方法 NdefRecord.createTextRecord ("en", "string") 在 API 级别 21 以下不工作

转载 作者:太空狗 更新时间:2023-10-29 16:31:18 25 4
gpt4 key购买 nike

当我在装有 Android Lollipop (5.x) 或 Marshmallow (6.0) 的设备上使用时,这段代码工作正常:

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public NdefMessage createNdfMessage(String content) {
NdefRecord record = NdefRecord.createTextRecord("en", content);
NdefMessage msg = new NdefMessage(new NdefRecord[]{record});
return msg;
}

但是当我在装有 Android 4.2.2(API 级别 17)的设备上尝试此操作时,我的应用程序崩溃了。我如何使用此代码在低于 21 的 API 级别(这是方法 NdefRecord.createTextRecord 可用的 API 级别)上创建文本记录?

最佳答案

方法 NdefRecord.createTextRecord() 是在 API 级别 21 中引入的。因此,它在低于该 API 级别的平台上不可用。但是,您可以轻松地自己组装文本记录。文本记录的有效负载由状态字节、语言代码字段和文本字段组成:

+-------------+---------------+--------------------------+| Status byte | Language code | Text                     || (1 byte)    | (n byte)      | (m byte)                 |+-------------+---------------+--------------------------+
  • The status byte indicates the character encoding of the text field (0 = UTF-8, 1 = UTF-16) in bit 7 and the length n of the language code in bits 5..0. Bit 6 must always be zero.
  • The language code filed contains an IANA language code encoded in US-ASCII (e.g. "en").

You could create the Text record using this method:

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(e);
}

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", content);

关于android - 方法 NdefRecord.createTextRecord ("en", "string") 在 API 级别 21 以下不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37875323/

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