android– 方法NdefRecord.createTextRecord(“en”,“string”)在API级别21下无法运行

android– 方法NdefRecord.createTextRecord(“en”,“string”)在API级别21下无法运行,第1张

概述当我在AndroidLollipop(5.x)或Marshmallow(6.0)的设备上使用它时,此代码工作正常:@TargetApi(Build.VERSION_CODES.LOLLIPOP)publicNdefMessagecreateNdfMessage(Stringcontent){NdefRecordrecord=NdefRecord.createTextRecord("en",content);NdefMessagemsg

当我在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)                 |+-------------+---------------+--------------------------+

>状态字节表示位7中文本字段(0 = UTF-8,1 = UTF-16)的字符编码,以及位5..0中语言代码的长度n.位6必须始终为零.
>语言代码字段包含以US-ASCII编码的IANA语言代码(例如“en”).

您可以使用此方法创建文本记录:

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下无法运行全部内容,希望文章能够帮你解决android – 方法NdefRecord.createTextRecord(“en”,“string”)在API级别21下无法运行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1102402.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存