博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NFC读取写入简单使用
阅读量:4135 次
发布时间:2019-05-25

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

NFC读取写入简单使用

适用于无加密普通NFC卡片数据读取写入

NFC数据读取写入的方法

Demo地址:

/** * 读取NFC数据 */public static String readNfcData(Intent intent) {
String text = ""; if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage msgs[] = null; if (rawMsgs != null) {
msgs = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i]; } } try {
if (msgs != null) {
NdefRecord record = msgs[0].getRecords()[0]; text = parseTextRecord(record); } } catch (Exception e) {
e.printStackTrace(); } } return text; }/***写入NFC数据*/public static boolean writeNfc(NdefMessage ndefMessage, Tag tag) {
try {
Ndef ndef = Ndef.get(tag); if (ndef != null) {
ndef.connect(); boolean isWritable = ndef.isWritable(); int maxSize = ndef.getMaxSize(); int msgLength = ndefMessage.toByteArray().length; if (!isWritable || maxSize < msgLength) {
return false; } ndef.writeNdefMessage(ndefMessage); ndef.close(); } else {
NdefFormatable formatable = NdefFormatable.get(tag); if (formatable != null) {
formatable.connect(); formatable.format(ndefMessage); formatable.close(); } } return true; } catch (Exception e) {
e.printStackTrace(); } return false; }public static NdefRecord createTextRecord(String text) {
byte[] langBytes = Locale.CHINA.getLanguage().getBytes(Charset.forName("US-ASCII")); Charset utfEncoding = Charset.forName("UTF-8"); byte[] textBytes = text.getBytes(utfEncoding); int utfBit = 0; char status = (char) (utfBit + langBytes.length); byte[] data = new byte[1 + langBytes.length + textBytes.length]; data[0] = (byte) status; System.arraycopy(langBytes, 0, data, 1, langBytes.length); System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length); NdefRecord ndefRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,NdefRecord.RTD_TEXT, new byte[0], data); return ndefRecord; }public static String parseTextRecord(NdefRecord ndefRecord) {
//判断TNF if (ndefRecord.getTnf() != NdefRecord.TNF_WELL_KNOWN) {
return null; } //判断可变的长度的类型 if (!Arrays.equals(ndefRecord.getType(), NdefRecord.RTD_TEXT)) {
return null; } try {
//获得字节数组,然后进行分析 byte[] payload = ndefRecord.getPayload(); //下面开始NDEF文本数据第一个字节,状态字节 //判断文本是基于UTF-8还是UTF-16的,取第一个字节"位与"上16进制的80,16进制的80也就是最高位是1, //其他位都是0,所以进行"位与"运算后就会保留最高位 String textEncoding = ((payload[0] & 0x80) == 0) ? "UTF-8" : "UTF-16"; //3f最高两位是0,第六位是1,所以进行"位与"运算后获得第六位 int languageCodeLength = payload[0] & 0x3f; //下面开始NDEF文本数据第二个字节,语言编码 //获得语言编码 String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII"); //下面开始NDEF文本数据后面的字节,解析出文本 String textRecord = new String(payload, languageCodeLength + 1,payload.length - languageCodeLength - 1,textEncoding); return textRecord; } catch (Exception e) {
throw new IllegalArgumentException(); } }

转载地址:http://disvi.baihongyu.com/

你可能感兴趣的文章
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
C#中ColorDialog需点两次确定才会退出的问题
查看>>
数据库
查看>>
nginx反代 499 502 bad gateway 和timeout
查看>>
linux虚拟机安装tar.gz版jdk步骤详解
查看>>
python实现100以内自然数之和,偶数之和
查看>>
python数字逆序输出及多个print输出在同一行
查看>>
苏宁产品经理面经
查看>>
百度产品经理群面
查看>>
去哪儿一面+平安科技二面+hr面+贝贝一面+二面产品面经
查看>>
element ui 弹窗在IE11中关闭时闪现问题修复
查看>>
vue 遍历对象并动态绑定在下拉列表中
查看>>
Vue动态生成el-checkbox点击无法选中的解决方法
查看>>
python __future__
查看>>
MySQL Tricks1
查看>>