9、NFC技术:NDEF文本格式解析
发布日期:2021-09-08 01:45:24 浏览次数:36 分类:技术文章

本文共 2018 字,大约阅读时间需要 6 分钟。

NDEF文本格式规范

      不管什么格式的数据本质上都是由一些字节组成的。对于NDEF文本格式来说。这些数据的第1个字节描述了数据的状态,然后若干个字节描述文本的语言编码,最后剩余字节表示文本数据。这些数据格式由NFC Forum的相关规范定义,可以从下面的地址下载相关的规范。

http://www.nfc-forum.org/specs/spec_dashboard

NDEF文本数据格式
状态字节编码格式
判断数据是否为NDEF格式

      获取NFC标签中的数据要通过NdefRecord.getPayload方法完成。当然,在处理这些数据之前,最好判断一下NdefRecord对象中存储的是不是NDEF文本格式数据。

判断的标准有如下两个

 TNF(类型名格式,Type Name Format)必须是NdefRecord.TNF_WELL_KNOWN。

 可变的长度类型必须是NdefRecord.RTD_TEXT。

 
1 import java.util.Arrays; 2 import android.nfc.NdefRecord; 3  4 /** 5  * 将NDEFRecord 文本数据解析出来,生成TextRecord对象 6  * @author dr 7  * 8  */ 9 public class TextRecord {10     // 解析出来文本放到该对象中。11     private final String mText;12 13     private TextRecord(String text) {14         mText = text;15     }16 17     public String getText() {18         return mText;19     }20 21     /**22      * 解析 ndefRecord 文本数据23      * @param ndefRecord24      * @return25      */26     public static TextRecord parse(NdefRecord ndefRecord) {27         // verify tnf   得到TNF的值28         if (ndefRecord.getTnf() != NdefRecord.TNF_WELL_KNOWN) {29             return null;30         }31         // 得到字节数组进行判断32         if (!Arrays.equals(ndefRecord.getType(), NdefRecord.RTD_TEXT)) {33             return null;34         }35 36         try {37             // 获得一个字节流38             byte[] payload = ndefRecord.getPayload();39             // payload[0]取第一个字节。 0x80:十六进制(最高位是1剩下全是0)40             String textEncoding = ((payload[0] & 0x80) == 0) ? "UTF-8"41                     : "UTF-16";42             // 获得语言编码长度43             int languageCodeLength = payload[0] & 0x3f;44             // 获得语言编码45             String languageCode = new String(payload, 1, languageCodeLength,46                     "US-ASCII");47             //48             String text = new String(payload, languageCodeLength + 1,49                     payload.length - languageCodeLength - 1, textEncoding);50 51             return new TextRecord(text);52 53         } catch (Exception e) {54             throw new IllegalArgumentException();55         }56     }57 58 }

 

转载地址:https://blog.csdn.net/weixin_34310369/article/details/85643484 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android Sensor传感器系统架构初探
下一篇:BZOJ3642 : [CEOI 2014] Cake

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月21日 07时48分27秒