Android开发之深入理解NFC(一)
深入理解NFC
NFC(Near field communication,近场通信)也叫做近距离无线通信技术。
从原理来说,NFC和wifi类似,二者都利用无线射频技术来实现设备之间的通信。
但是,和WIFI相比,NFC的工作频率为13.55Hz,有效距离为4cm,支持的传输速率有106kps、212kps和424kps三种。
1 NFC基础知识
1.1 NFC概述
NFC融合了三条主要的数据发展路线
- RFID技术路线,即无线射频识别技术
- 磁条卡技术路线
- 移动终端线路,演化了携带NFC功能的终端设备
NFC的技术框架
由图可知。
从用户角度(即Application层之上)来看,NFC有三种运行模式(operation mode)。
Reader/write模式:简称R/W,和NFC Tag/NFC Reader相关
Peer-to-Peer模式:简称P2P,它支持两个NFC设备交互。
NFC Card Emulation模式:简称CE,它能把携带NFC功能的设备模拟成Smart Card,这样就能实现诸如手机支付、门禁卡之类的功能。
1.2NFC R/W运行模式
- 左边的只能终端扮演了NFC Reader角色
- 在R/W模式中,交互操作的发起方只能是NFC Reader,因此它也称为Initiator或Active Device
- 右边的NFC Tag,由于需要NFC Reader通过电磁感应为其提供电能,所以在R/W模式中,NFC Tag只能作为交互操作的Target
NFC Forum定义了四种类型的Tag,分别为Type1,Type2,Type3和Type4.
NFC Forum定义了两个通用的数据结构用于NFC Device之间(包括R/W模式中的NFC Reader和NFC Tag)传递数据。这两个通用数据结构分别为NFC Data Exchange Format(NDEF)以及NFC Record
NFC四种不同类型的Tag有何区别
虽然NFC Tag有四种不同类型,但为了保证最大兼容性,NFC Forum建议NFC设备之间尽量使用通用数据结构NDEF和NFC Record来交换信息。
NFC R/W 模式涉及的规范较多,包括:
- NFC Reader如何与不同类型的Tag交互,这部分内容涉及非常底层的一些协议。
- NDEF和一些常用数据类型定义。
NDEF和NFC Record
(1)NDEF和NFC Record之间的关系
NFC设备之间每一次交互的数据都会封装在一个NDEF Message中,而一个NDEF Message可以包含多个NFC Record,真正的数据则封装在NFC Record中。
在一个NDEF Message中,第一个NFC Record需要设置其MB位(Message Begin)为1,表示它是该消息中第一个NFC Record,最后一个NFC Record需设置ME位(Message End)位为1,表示它是此消息中最后一个NFC Record。
NFC Record分为NFC Record Header(头部信息)和Payload(数据载荷)两大部分。
Record Header 中最重要的是其第一字节。该字节有6个标志信息,分别为
- MB(Message Begin标志)
- ME(Message End标志)
- CF(Chunk Flag标志,表示该Record是否为分片Record)
- SR(Short Record标志,如果该标志被设置,则图中的4个Payload Length字段仅需一个,这表明Playload数据长度将限制在255字节以内)
- IL(ID_LENGTH标志,用于指明Header中是否包含ID Length和ID这两个字段)
- TNF(Type Name Format标志,用于指明Payload的类型,NFC Forum定义了一些常用的Payload类型)
- Type Length 指明Record Header中Type字段的长度
- Payload Length3~Payload Length0 这4个字段共同指明Payload字段的长度。如果SR标志被设置,则Record Header仅包含一个Payload length字段
- ID Length指明ID字段的长度。
- Type字段表明Payload的类型,NFC Forum定义了诸如URI、MIME等类型的Type,其目的是方便不同的应用来处理不同Type的数据,例如URI类型的数据就交给浏览器来处理。
- ID需要配合URI类型的Payload一起使用,它使得一个NFC Record能通过ID来指向另外一个NFC Record
(2)TNF和RTD
TNF用于描述一个NFC Record中数据(Payload)的类型,NFC Forum规定了一些常用的数据类型。
- Empty:该Record中没有数据,即相当于一个空的NFC Record
- NFC Forum Well-Known Type:由NFC Forum定义的一些较为常见的数据类型,包括URI、TEXT等,其格式遵循NFC Forum RTD(Record Type Definition)规范。
- MIME:multipurpose Internet Mail Extensions的缩写,遵循RFC2046规范。
- Absolute URI:绝对URI
- NFC Forum External Type,后面介绍
- Unknown:代表Payload中的数据类型未知。
- Unchanged:这种类型的数据用于NFC Record分片。例如一个大的数据需要通过多个NFC Record来承载,除第一个NFC Record分片外,该数据对应的其他NFC Record分片都必须设置TNF为Unchanged。
在TNF七大类型中,NFC Forum通过RTD规范定义了其中的WKT(Well-KnownType)和External Type两种类型。
简单来说,WKT就是NFC Forum自己定义的一些常用数据类型,目前常用类型如下。
URI Record Type:用于存储URI数据,对于Type字段取值为“U”
Text Record Type:用于存储文本数据,对于Type字段取值为”T”
Signature Record Type:用于存储数字签名数据,对于Type字段取值为“Sig”
Smart Poster Record Type:智能海报,用于存储与该海报相关的一些咨询信息,如图片、相关介绍等,对于Type字段取值为”Sp”。
Generic Control Record Type:用于传递控制信息,对于Type字段取值为“Ge”
External Type:为第三方组织定义的类型,目前NFC Forum没有定义相关的数据类型
2.NFC Record实例
(1)URI Record Type
URI Record Type属于NFC Forum Well-known Type的一种,其对应的Type字段取值为“U”
对于这种类型的NFC Record,其Payload组织结构
在URI Record Payload中,第一个字节指明URI的ID码
像http://www.nfc.com这样的信息该如何封装为一个NDEF消息
由于该NDEF消息只包含一个NFC Record,所以这个唯一的NFC Record将设置MB和ME标志位为1,由于数据量小于255字节,所以SR标志位为1.最后,该Record携带的数据属于URI类型,它为Well-Known Type 的一种,所以TNF 取值为0x01.
Type Length字段取值为0x01,对应的Type字段取值为”U”,代表URI Record Type
URI Record的介绍,这种类型Record的Payload包含ID Code和data两个部分。
ID Code取值为0x01占据1字节(代表”http://www”),而data为”nfc.com”占据7个字节,所以整个Payload长度为8字节,故Payload length字段取值为0x08.
当应用程序获取Payload信息后,将根据ID Code和Data的取值最终计算出对应的URI为http://www.nfc.com
(2)Text Record Type实例
携带“Hello World”字符串信息的NDEF消息各字段的取值情况。
至此NFC R/W运行模式介绍完毕。在R/W模式下,对应用程序而言最重要的工作就是解析NDEF消息。NFC Forum定义了七种数据类型,其中内容比较丰富的属于NFC Forum Well Known Type。
Android开发之深入理解NFC(一)的更多相关文章
- Android开发之深入理解泛型extends和super的区别
摘要: 什么是泛型?什么是擦除边界?什么是上界限定或下界限定(子类型限定或超类型限定)?什么是类型安全?泛型extends关和super关键字结合通配符?使用的区别,两种泛型在实际Android开发中 ...
- Android 开发之深入理解安卓调试桥各种错误解决办法
摘要: Android开发调试项目使用到安卓调试桥工具,Android Debug Bridge(ADB)位于sdk路径platform-tools文件夹,使用Android Studio或Eclip ...
- android开发-mvp模式理解
看之前,先忘掉所有,一步步看就行了. 最后会有一个原型demo,当然是转的了.看完文章,再看demo,然后再回头看文章就很好理解了,最好自己写一遍. 1.mvp开发模式可以理解为页面接口编程,每一层的 ...
- Android开发之深入理解Android 7.0系统权限更改相关文档
http://www.cnblogs.com/dazhao/p/6547811.html 摘要: Android 6.0之后的版本增加了运行时权限,应用程序在执行每个需要系统权限的功能时,需要添加权限 ...
- Android 开发笔记“Application 理解”
Android 中Application类用法 1. Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时 ...
- Android开发之深入理解Android Studio构建文件build.gradle配置
摘要: 每周一次,深入学习Android教程,TeachCourse今天带来的一篇关于Android Studio构建文件build.gradle的相关配置,重点学习几个方面的内容:1.applica ...
- android开发:深入理解View(一):从setContentView谈起
我们都知道 MVC,在Android中,这个 V 即指View,那我们今天就来探探View的究竟. 在onCreate方法中,可以调用this.setContentView(layout_id),来设 ...
- Android开发(八)——Android组件
参考: [1] Android开发教程:理解Intent和Intent Filter.http://liuzhichao.com/p/506.html
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解
原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...
随机推荐
- OD 实验(二) - 绕过序列号验证
需要破解的程序 输入用户名和序列号,点击 Check,程序会进行校验 用 OD 打开程序 按快捷键 Ctrl+F9 跟随表达式 GetDlgItemTextA 点击 ok 在这里调用了 GetDlgI ...
- 灾难恢复:RPO与RTO
许多企事业单位虽然已经认识到信息安全的重要性,却迟迟没有行动.其中的原因是多方面的,最主要的一个原因就是在如何建立容灾系统的问题上存在种种疑惑.容灾设计指标主要与容灾系统的数据恢复能力有关,最常见的设 ...
- 使用国内源部署ceph
由于网络方面的原因,Ceph的部署经常受到干扰,通常为了加速部署,基本上大家都是将Ceph的源同步到本地进行安装.根据Ceph中国社区的统计,当前已经有国内的网站定期将Ceph安装源同步,极大的方便了 ...
- PHP RSA加密解密
1.生成密钥和公钥 开始前需要准备openssl环境 linux 需要安装openssl工具包,传送门http://www.openssl.org/source/ window 下需要安装openss ...
- linux 进程通信 :流套接字
消息队列是可以实现没有共同关系的进程之间的通信.Socket则可以实现不同计算机的不同进程之间的通信. //地址的结构体 struct sockaddr_in{ short int sin_famil ...
- Splash Screen 加载窗体 [not finished]
对于windows开 发人员来说在打开VS开发工具时,总是先呈现一个SplashScreen界面,登上几秒钟后才打开VS的主界面.这样的效果一般是在主界面需要加载大量 资源,为避免主界面变成“死”界面 ...
- Arduino UNO 键盘记录器中时钟接到2口或3口,其它接口不行。马上就要放弃了。要修改例子中时钟的引脚。
- RHCE7 学习里程-3基本命令
一.centos7 基本命令 #创建文件 touch a.b #创建文件夹 mkdir abc #删除文件 rm -f a.b #删除空文件夹 rm -rf abc #重命名文件 mv 源文件 新文 ...
- rails scaffold生成的crud显示自定义的列名
1. 访问 rails i18n 插件的官方网站 ,查看信息http://guides.rubyonrails.org/i18n.html2. 在Gemfile 中加入 测试rails4.2.1不用 ...
- IDEA2018.2版本注册
IntelliJ IDEA 2018.2版本注册 1.到官网下载IDEA安装文件,windows版本ideaIU-2018.2.2.exe,然后安装: 2.下载补丁包JetbrainsCrack-3. ...