Android NFC开发(一)——初探NFC,了解当前前沿技术
官方文档:http://developer.android.com/guide/topics/connectivity/nfc/index.html
我们根据Google的官方文档来
一.什么是NFC
NFC(Near Field Communication 近场通讯),他是当前逐渐火起来的一种技术,在以前,好像还一直不冷不热的样子,现在好像是块要爆发了,所以我们搞Android开发的感觉强撸了一把,随我来学习一下NFC的技术
二.NFC与WIFI,Bluetooth,红外线的差异
这些都是可以做数据传输的,但是差异最大的还是体现在有效距离上了,这里不能超过4CM
三.NFC的工作模式
- 读卡器模式(Reader/Witer Mode)
- 仿真卡模式(Card Emulation Mode)
- 点对点模式(P2P Mode)
四.读卡器模式(Reader/Witer Mode)
我们从某个支持NFC功能的媒介上读取相关数据
五.-仿真卡模式(Card Emulation Mode)
这也是运用比较广泛的,我们可以把手机刷公交,地铁之类的
功能就是这个模式,其原理就是将相应IC卡中的信息(支付凭证)封装成数据包存储起来,使用的时候NFC有个射频器,有设备靠近的时候,就会验证,读写,并且进行相应的处理,比如开门,支付什么的。
六.点对点模式(P2P Mode)
这个模式跟wifi热点有点类似,距离很短,两部设备连接起来可以共享数据,传输速度非常的快,而且如果两部手机都是Android4.2,NFC传输会直接利用蓝牙传输,这种技术称为Android Beam ,所以使用Android Beam传输数据的两部设备不再局限性在4CM内了
7.差异
图片借用了某网站哈
8.如何NFC标签被映射到MIME类型和URI
你开始写你的NFC应用之前,必须了解不同类型的NFC标签是很重要的,标签调度系统如何解析NFC标签和特殊的工作,当它检测到NDEF消息的标记调度系统一样。NFC标签来在广泛的技术和还可以有许多不同的方式写入到其中的数据。机器人具有用于NDEF标准
NDEF数据被封装的消息(内部NdefMessage),其中包含一个或多个记录(NdefRecord)。每个NDEF记录必须根据您要创建的记录类型的规格良好的。Android版 还支持其它类型的标签不包含NDEF的数据,您可以通过在使用类的工作android.nfc.tech包。要了解更多有关这些技术,请参阅高级NFC主题。这些其他类型的标签工作包括编写你自己的协议栈与标签进行通信,因此,我们建议使用NDEF在可能的情况,便于开发和最大支持Android的供电设备。
注意: 要下载完整NDEF的规格,请访问NFC论坛规范下载网站,看到 创建常见类型的NDEF记录了如何构建NDEF记录的例子。
现在,你有NFC标签的背景,下面的章节详细描述了Android的如何处理NDEF格式化的标签。当一个Android设备扫描包含NDEF格式的数据的NFC标签,它解析该消息并试图找出数据的MIME类型或标识的URI。要做到这一点,系统读取所述第一NdefRecord内侧NdefMessage以确定如何解释整个NDEF消息(一个NDEF消息可以有多个NDEF记录)。在一个结构良好的NDEF消息,第一NdefRecord 包含以下字段:
3-bit TNF (Type Name Format)
指示如何解释可变长度类型字段
Variable length type
描述了记录的类型。如果使用TNF_WELL_KNOWN,使用此字段指定记录类型定义(RTD)
Variable length payload
要读取或写入的实际数据的有效载荷。一个NDEF消息可以包含多个NDEF记录,所以不承担全部有效载荷在NDEF消息的第一NDEF纪录。
标签调度系统使用3-bit TNF (Type Name Format)和类型字段来尝试映射MIME类型或URI的NDEF消息。如果成功,它封装了一个内部的信息ACTION_NDEF_DISCOVERED与实际载荷一起意图。不过,也有当标签调度系统不能确定数据的基础上,第一个NDEF记录中的类型的情况。这种情况发生在NDEF数据不能被映射到一个MIME类型或URI,或当NFC标签不包含NDEF数据开始。在这种情况下,一个标签具有关于标签的技术和有效载荷信息对象被封装一个的内部ACTION_TECH_DISCOVERED意图代替。
表1描述了标签调度系统如何TNF和类型字段映射到MIME类型或URI的。它也描述了TNFs不能被映射到一个MIME类型或URI。在这些情况下,标签调度系统回落到 ACTION_TECH_DISCOVERED。
例如,如果标签调度系统遇到类型的记录TNF_ABSOLUTE_URI,它映射该记录成URI的可变长度类型字段。标签调度系统封装该URI在一个数据字段ACTION_NDEF_DISCOVERED意图提供关于标签的其他信息,例如有效载荷沿。在另一方面,如果遇到类型的记录TNF_UNKNOWN,它会创建一个封装标签的技术,而不是意图。
9.如何NFC标签被分派到应用程序
当标签调度系统做创建封装NFC标签和识别信息的意图,它发出的意图,对于意图过滤感兴趣的应用程序。如果有多个应用程序可以处理的意图,提出活动选配,以便用户可以选择的活动。标签调度系统定义了三个意图,这是在最高的顺序列出来最低优先级:
- ACTION_NDEF_DISCOVERED:此意图是用来启动一个活动时,它包含一个NDEF净荷标签的扫描和是一个公认的类型。这是最高优先级的意图,并且标签调度系统尝试尽可能任何其他意图,之前启动这一意图的活动。
- ACTION_TECH_DISCOVERED:如果没有活动登记办理
- ACTION_TAG_DISCOVERED:如果没有活动处理这一意图开始-
- ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED 意图。
标签调度系统工作的基本方法如下:
- 尝试启动与由标签调度系统解析NFC标签(或时创建的意图一个Activity ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED)。
- 如果这一意图没有活动过滤器,尝试启动下一个优先级最低的意图(可以是活动ACTION_TECH_DISCOVERED或ACTION_TAG_DISCOVERED),直到意图或直至标签调度系统中的应用程序过滤器尝试所有可能的目的。
- 如果没有应用程序筛选任何意图的,什么也不做。
只要有可能,以NDEF消息和工作ACTION_NDEF_DISCOVERED意图,因为它是最特定出的三个。此意向,您可以在比其他两个意图更适当的时间启动应用程序,给用户更好的体验。