注意

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格式规范及读写示例的更多相关文章

  1. NFC(10)NDEF uri格式规范及读写示例(解析与封装ndef uri)

    只有遵守NDEF uri 格式规范的数据才能写到nfc标签上. NDEF uri 格式规范 uri 只有两部分: 第1个字节是uri协议映射值,如:0x01 表示uri以 http://www.开头. ...

  2. NFC(9)NDEF文本格式规范及读写示例(解析与封装ndef 文本)

    只有遵守NDEF文本格式规范的数据才能写到nfc标签上. NDEF文本格式规范 不管什么格式的数据本质上都是由一些字节组成的.对于NDEF文本格式来说. 1,这些数据的第1个字节描述了数据的状态, 2 ...

  3. android nfc中MifareClassic格式的读写

    Android支持的数据格式 数据格式的Intent filter AndroidManifest.xml文件中,要像向下列示例那样,在<activity>元素内的<meta-dat ...

  4. RSS介绍、RSS 2.0规范说明和示例代码

    RSS是一种消息来源格式规范,用以发布经常更新资料的网站,例如博客.新闻的网摘.RSS文件,又称做摘要.网摘.更新.频道等,包含了全文或节选文字,再加上一定的属性数据.RSS让发布者自动发布信息,也使 ...

  5. OverWatch团队文档格式规范

    V1.0 最终修改于2016/10/19 概述 软件工程中,一份优雅的文档不仅能降低团队成员之间的沟通难度,而且能给之后的开发者提供一个非常有效的引导.本团队为了规范整个项目中文档的格式,便于统一管理 ...

  6. WEB学习笔记4-前端代码基本命名规法和格式规范

    1.HTML命名规范及格式规范 标签名和属性应该都小写,虽然HTML代码不区分大小写:属性值应该用双引号闭合. <IMG src=demo.jpg alt='test'/>(N) < ...

  7. 理解CSV格式规范(解析CSV必备)

    什么是CSV逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录.每个记录由一个或多个字段组成,用逗号分隔.使 ...

  8. GeoJSON格式规范说明

    GeoJSON格式规范说明 1.简介 GeoJSON是一种对各种地理数据结构进行编码的格式.GeoJSON对象可以表示几何.特征或者特征集合.GeoJSON支持下面几何类型:点.线.面.多点.多线.多 ...

  9. IOS格式规范

    IOS格式规范 目录 概述 日期格式 NSDateFormatter格式说明 概述 日期格式 声明时间格式:NSDateFormatter *date_formatter = [[NSDateForm ...

随机推荐

  1. 处理器在 protected mode 下的 protection

    前言 实模式,保护模式,分段,分页,虚拟内存,内核态,用户态,如果你对这些术语之间的关系非常熟悉,那就不用继续看了.这篇主要记录我对用户态/内核态的一些理解,如有不对还请指教. 下述说明均为 x86- ...

  2. PHP 反射 ReflectionClass

    今天遇到了这样一个问题,如下代码: classA.php <?php class ClassA{ public function funcAa(){ } public function func ...

  3. 【转】 c++拷贝构造函数(深拷贝,浅拷贝)详解

     c++拷贝构造函数(深拷贝,浅拷贝)详解 2013-11-05 20:30:29 分类: C/C++ 原文地址:http://blog.chinaunix.net/uid-28977986-id-3 ...

  4. 解决FPDF报错:FPDF error: Not a JPEG file / FPDF error: Not a PNG file

    最近有个项目需要用到FPDF,但是输出的时候报错: FPDF error: Not a JPEG file: http://***/data/attachment/forum/201603/19/10 ...

  5. ECSHOP添加购物车加图片飞入效果

    为ECSHOP的添加购物车,加入图片飞入效果. 首先: 在goods.dwt中查找添加购物车按钮: 为添加购物车按钮加上id: 例如: <a id="iproduct_{$goods. ...

  6. s3c-u-boot-1.1.6源码分析之一start.s

    定位到\s3c-u-boot-1.1.6\cpu\s3c64xx\start.s,打开该文件 /* * armboot - Startup Code for S3C6400/ARM1176 CPU-c ...

  7. The content of element type "sqlMapConfig" is incomplete,

    The content of element type "sqlMapConfig" is incomplete, it must match "(properties? ...

  8. 浅谈string

    #include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件 using std::string;using ...

  9. gulp前端自动化构建工具入门篇

    现在我们通过这3个问题来学习一下: 1.什么是gulp? 2.为什么要用gulp? 3.怎么用?   什么是gulp 答:是一个前端自动化的构建工具,直白点说,如果没有这个工具,我们利用人工依旧可以做 ...

  10. 【Cardboard】 体验 - Google Cardboard DIY及完成后简单体验

    体验 - Google Cardboard DIY及完成后简单体验 今年的Google I/O最让我感兴趣的除了Material Design以外就是这个Google Cardboard了.据说是Go ...