NFC(11)MifareUltralight格式规范及读写示例
注意
MifareUltralight 不支三种过滤方式之一,只支持第四种(用代码,activity singleTop )
见 NFC(4)响应NFC设备时启动activity的四重过滤机制
MifareUltralight数据格式规范
将NFC标签的存储区域分为16个页,每一个页可以存储4个字节,一个可存储64个字节(512位)。页码从0开始(0至15)。前4页(0至3)存储了NFC标签相关的信息(如NFC标签的序列号、控制位等)。从第5页开始存储实际的数据(4至15页)。
示例代码:
import java.nio.charset.Charset; import android.app.Activity;
import android.app.PendingIntent;
import android.content.Intent;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.MifareUltralight;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.Toast; /*
* 本类为处理MifareUltralighto格式nfc标签的aty
*/
public class MifareultralightMainActivity extends Activity { private CheckBox mWriteData;
private NfcAdapter mNfcAdapter;
private PendingIntent mPendingIntent; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_mifareultralight);
mWriteData = (CheckBox) findViewById(R.id.checkbox_write); //1,设置当前窗口为处理nfc标签的窗口.
mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mPendingIntent = PendingIntent.getActivity(this, , new Intent(this,getClass()), );
} /*
* 2,注册为处理nfc标签的前台窗口
*/
@Override
public void onResume() {
super.onResume();
if (mNfcAdapter != null) {
mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null,null);
}
}
@Override
public void onNewIntent(Intent intent) {
//得到nfc标签.
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); //得到nfc标签内支持的数据格式,如ndef,MifareUltralight
String[] techList = tag.getTechList(); //判断是否支持MifareUltralight数据格式
boolean haveMifareUltralight = false;
for (String tech : techList) {
if (tech.indexOf("MifareUltralight") >= ) {
haveMifareUltralight = true;
break;
}
}
if (!haveMifareUltralight) {//标签不支持MifareUltralight数据格式
Toast.makeText(this, "本标签不支持MifareUltralight数据格式",Toast.LENGTH_LONG).show();
return;
}
if (mWriteData.isChecked()) {
//3,写数据
writeTag(tag);
} else {
//4,读数据
String data = readTag(tag);
if (data != null)
Toast.makeText(this, data, Toast.LENGTH_LONG).show();
} }
/*
*5,注销处理nfc标签的窗口
*/
@Override
public void onPause() {
super.onPause();
if (mNfcAdapter != null) {
mNfcAdapter.disableForegroundDispatch(this);
}
}
/*
* 向nfc标签写入数据
* 将NFC标签的存储区域分为16个页,每一个页可以存储4个字节,一个可存储64个字节(512位)。
* 页码从0开始(0至15)。前4页(0至3)存储了NFC标签相关的信息(如NFC标签的序列号、控制位等)。
* 从第5页开始存储实际的数据(4至15页)。
*/
public void writeTag(Tag tag) {
//向nfc标签写数据第1步,从标签中得到MifareUltralight
MifareUltralight ultralight = MifareUltralight.get(tag);
try {
//向nfc标签写数据第2步, connect
ultralight.connect(); /*
* 向nfc标签写数据第3步, 正式写数据.前4页(0至3)存储了NFC标签相关的信息
*
* 注意 Charset.forName("GB2312")),
* 不用utf-8因为一个汉字有可能用3个字节编码汉字,那么2个汉字有可能是6个字节.
* 而GB2312始终用2个字节.而每页最多4个字节,
*/
ultralight.writePage(, "中国".getBytes(Charset.forName("GB2312")));//第4页,页从0开始.
ultralight.writePage(, "美国".getBytes(Charset.forName("GB2312")));
ultralight.writePage(, "英国".getBytes(Charset.forName("GB2312")));
ultralight.writePage(, "德国".getBytes(Charset.forName("GB2312"))); Toast.makeText(this, "成功写入MifareUltralight格式数据",Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ultralight.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/*
* 读取MifareUltralight格式数据
*/
public String readTag(Tag tag) {
//读数据 第1步,从nfc标签中得到MifareUltralight
MifareUltralight ultralight = MifareUltralight.get(tag); try {
//读数据 第2步,接连
ultralight.connect();
//读数据 第3步,从ultralight数据中的下标为4的位开始读数据.
byte[] data = ultralight.readPages();
//读数据 第4步,把读出的数据存到一个string中.注意语言编码
return new String(data, Charset.forName("GB2312"));
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ultralight.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}
NFC(11)MifareUltralight格式规范及读写示例的更多相关文章
- NFC(10)NDEF uri格式规范及读写示例(解析与封装ndef uri)
只有遵守NDEF uri 格式规范的数据才能写到nfc标签上. NDEF uri 格式规范 uri 只有两部分: 第1个字节是uri协议映射值,如:0x01 表示uri以 http://www.开头. ...
- NFC(9)NDEF文本格式规范及读写示例(解析与封装ndef 文本)
只有遵守NDEF文本格式规范的数据才能写到nfc标签上. NDEF文本格式规范 不管什么格式的数据本质上都是由一些字节组成的.对于NDEF文本格式来说. 1,这些数据的第1个字节描述了数据的状态, 2 ...
- android nfc中MifareClassic格式的读写
Android支持的数据格式 数据格式的Intent filter AndroidManifest.xml文件中,要像向下列示例那样,在<activity>元素内的<meta-dat ...
- RSS介绍、RSS 2.0规范说明和示例代码
RSS是一种消息来源格式规范,用以发布经常更新资料的网站,例如博客.新闻的网摘.RSS文件,又称做摘要.网摘.更新.频道等,包含了全文或节选文字,再加上一定的属性数据.RSS让发布者自动发布信息,也使 ...
- OverWatch团队文档格式规范
V1.0 最终修改于2016/10/19 概述 软件工程中,一份优雅的文档不仅能降低团队成员之间的沟通难度,而且能给之后的开发者提供一个非常有效的引导.本团队为了规范整个项目中文档的格式,便于统一管理 ...
- WEB学习笔记4-前端代码基本命名规法和格式规范
1.HTML命名规范及格式规范 标签名和属性应该都小写,虽然HTML代码不区分大小写:属性值应该用双引号闭合. <IMG src=demo.jpg alt='test'/>(N) < ...
- 理解CSV格式规范(解析CSV必备)
什么是CSV逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录.每个记录由一个或多个字段组成,用逗号分隔.使 ...
- GeoJSON格式规范说明
GeoJSON格式规范说明 1.简介 GeoJSON是一种对各种地理数据结构进行编码的格式.GeoJSON对象可以表示几何.特征或者特征集合.GeoJSON支持下面几何类型:点.线.面.多点.多线.多 ...
- IOS格式规范
IOS格式规范 目录 概述 日期格式 NSDateFormatter格式说明 概述 日期格式 声明时间格式:NSDateFormatter *date_formatter = [[NSDateForm ...
随机推荐
- apache 设置禁止访问某些文件或目录
[apache配置禁止访问]1. 禁止访问某些文件/目录增加Files选项来控制,比如要不允许访问 .inc 扩展名的文件,保护php类库:<Files ~ "\.inc$" ...
- thinkphp 前后版本ajaxReturn方法的分别
之前用的是thinkphp2的版本现在改到thinkphp3.2已上的版本,发现ajaxReturn这个方法返回的数据不一样了,现在做下记录 thinkphp2的ajaxReturn的实现原码 pro ...
- spring-cloud-hystrix熔断
依赖pom <dependencyManagement> <dependencies> <dependency> <groupId>org.spring ...
- Cassandra1.2文档学习(16)—— 模式的变化
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_schema ...
- compared woth QPSK, what is the advantages of QAM(16QAM or 64QAM?)
1.QPSK QPSK是英文Quadrature Phase Shift Keying的缩略语简称,意为正交相移键控,是一种数字调制方式.在数字信号的调制方式中QPSK四相移键控是目前最常用的一种卫星 ...
- Django文档——Model字段选项(Field Options)
建立一个简易Model class Person(models.Model): GENDER_CHOICES=( (1,'Male'), (2,'Female'), ) name=models.Cha ...
- 快捷设置IE代理小工具
时间:2015-02-06 起因: 公司新装了PLM系统,用这个系统必须使用指定IP段的IP才能访问.所以为了还能愉快的继续使用代理进行特定网站的访问,我们必须要频繁的去设置IE代理,这也太麻烦了吧. ...
- 【BZOJ 2730】 [HNOI2012]矿场搭建
Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...
- hdu 3714 Error Curves(三分)
http://acm.hdu.edu.cn/showproblem.php?pid=3714 [题意]: 题目意思看了很久很久,简单地说就是给你n个二次函数,定义域为[0,1000], 求x在定义域中 ...
- [转载]C#中各种计时器
1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch) Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 S ...