博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Android NFC近场通信1——NFC概述

Posted on 2013-07-13 00:16  泡泡糖  阅读(3030)  评论(1编辑  收藏  举报

  最近对NFC挺感兴趣,而且新换的手机也支持NFC功能(最近换了Find5,感觉还不错O(∩_∩)O),所以打算学学NFC编程。NFC就是我们经常说的近场通信。通常距离是4厘米或更短。NFC工作频率是13.56M Hz,传输速率是106kbit/s 到848kbit/s。不过网上查了一下,发现NFC的资料并不多,所以还是去看看android.developer上面的介绍和基本教程。下面资料主要是参考android官网,中间加入一些个人的心得笔记。

 

1、NFC可以做的事情

  NFC通信时是使用一种叫做NDEF的数据格式来通信,简单来说就是NFC芯片使用的一种通信协议。一般我们可以使用NFC完成下面的工作:

  • 从NFC标签中读取NDEF数据
  • 把NDEF消息从一个设备发送给另一个设备

  第一,NFC标签其实就是一种电子标签,里面写入了指定的数据,我们通过支持NFC的设备,就可以读取这些标签的数据。例如我在某个标签写入启动MP3播放器,但我把手机靠近这个标签时,手机就会启动音乐播放器。

  第二,这个功能就是一般的无线通信功能,可以取代我们用的蓝牙发送文件。

 

2、Android  Beam功能

  Android Beam是一个基于近场通信所做的新功能,这个功能可以为其他手机分享你正在使用的功能。Android升级到4.1后,Android Beam现在可以在两台支持NFC的Android设备间分享照片和视频,还可以与支持NFC的蓝牙设备相连。同时两部NFC手机只有靠近即可完成消息传递,蓝牙配对等

 

3、NFC标签调度系统
  通常,除非是在设备的设置菜单中NFC被禁用,否则Android设备会在非锁屏的状态下搜索NFC。当Android设备发现NFC标签时,期望的行为是用最合适的Activity来处理该Intent,而不是询问用户使用什么应用程序。因为设备只能在很短的范围内扫描到NFC标签,强制的让用户手动的选择一个Activity,会导致设备离开NFC标签,从而中断该连接。你应该开发你自己的Activity来处理你所关心的NFC标签,从而阻止 选择器的操作。
为了帮助你达到这个目标,Android提供了特殊的标签调度系统,来分析扫描到的NFC标签,通过解析数据,在被扫描到的数据中尝试找到感兴趣的应用程序,具体做法如下:
1.  解析NFC标签并搞清楚标签中标识数据负载的MIME类型或URI;
2.  把MIME类型或URI以及数据负载封装到一个Intent中。
3.  基于Intent来启动Activity。

 

4、相关数据格式

3-bit TNF(类型名称格式)
  指示如何解释可变长度类型字段,在下表1中介绍有效值。
可变长度类型
  说明记录的类型,如果使用TNF_WELL_KNOWN,那么则使用这个字段来指定记录的类型定义(RTD)。在下表2中定义了有效的RTD值。
可变长度ID
  唯一标识该记录。这个字段不经常使用,但是,如果需要唯一的标识一个标记,那么就可以为该字段创建一个ID。
可变长度负载
你想读/写的实际的数据负载。一个NDEF消息能够包含多个NDEF记录,因此不要以为在NDEF消息的第一条NDEF记录中包含了所有的负载。


  标签调度系统使用TNF和类型字段来尝试把MIME类型或URI映射到NDEF消息中。如果成功,它会把信息跟实际的负载一起封装到ACTION_NEDF_DISCOVERED类型的Intent中。但是,会有标签调度系统不能根据第一条NDEF记录来判断数据类型的情况,这样就会有NDEF数据不能被映射到MIME类型或URI,或者是NFC标签没有包含NDEF开始数据的情况发生。在这种情况下,就会用一个标签技术信息相关的Tag对象和封装在ACTION_TECH_DISCOVERED类型Intent对象内部的负载来代替。
表1.介绍标签调度系统映射如何把TNF和类型字段映射到MIME型或URI上。同时也介绍了那种类型的TNF不能被映射到MIME类型或URI上。这种情况下,标签调度系统会退化到ACTION_TECH_DISCOVERED类型的Intent对象。
  例如,如果标签调度系统遇到一个TNF_ABSOLUTE_URI类型的记录,它会把这个记录的可变长度类型字段映射到一个URI中。标签调度系统会把这个URI跟其他相关的标签的信息(如数据负载)一起封装到ACTION_NDEF_DISCOVERED的Intent对象中。在另一方面,如果遇到了TNF_UNKNOWN类型,它会创建一个封装了标签技术信息的Intent对象来代替。

 

 

上面是NFC主要的属性和URL以及MIME类型。今天主要是对NFC有个了解,后面打算写个测试例子读取公交卡的数据。

 

Edited by mythou

原创博文,转载请标明出处:http://www.cnblogs.com/mythou/p/3187425.html