深入分析Android NFC技术 android nfc开发
从概念,实现原理以及最红实现的源码等有助于大家对nfc技术有更深入的理解。
nfc 是 near field communication 缩写,即近距离无线通讯技术。可以在移动设备、消费类电子产品、pc 和智能控件工具间进行近距离无线通信。简单一点说,nfc 功能是什么?nfc功能有什么用?其实nfc提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。nfc 技术允许电子设备之间进行非接触式点对点数据传输,在十厘米(3.9英吋)内,交换数据,其传输速度有106kbit/秒、212kbit/秒或者424kbit/秒三种。接下来我们更加详细的来了解一下nfc的应用。
一、nfc是什么,它的工作模式?
nfc工作模式主要有三种工作模式,分别是卡模式(card emulation)、点对点模式(p2p mode)和读卡器模式(reader/writer mode)。
(1)读卡器模式 http://www.jianshu.com/p/e89cc9bba8a6
数据在nfc芯片中,可以简单理解成“刷标签”。本质上就是通过支持nfc的手机或其它电子设备从带有nfc芯片的标签、贴纸、名片等媒介中读写信息。通常nfc标签是不需要外部供电的。当支持nfc的外设向nfc读写数据时,它会发送某种磁场,而这个磁场会自动的向nfc标签供电。
(2)仿真卡模式
数据在支持nfc的手机或其它电子设备中,可以简单理解成“刷手机”。本质上就是将支持nfc的手机或其它电子设备当成借记卡、公交卡、门禁卡等ic卡使用。基本原理是将相应ic卡中的信息凭证封装成数据包存储在支持nfc的外设中 。在使用时还需要一个nfc射频器(相当于刷卡器)。将手机靠近nfc射频器,手机就会接收到nfc射频器发过来的信号,在通过一系列复杂的验证后,将ic卡的相应信息传入nfc射频器,最后这些ic卡数据会传入nfc射频器连接的电脑,并进行相应的处理(如电子转帐、开门等操作)。
(3)点对点模式
该模式与蓝牙、红外差不多,用于不同nfc设备之间进行数据交换,不过这个模式已经没有有“刷”的感觉了。其有效距离一般不能超过4厘米,但传输建立速度要比红外和蓝牙技术快很多,传输速度比红外块得多,如过双方都使用 android4.2,nfc会直接利用蓝牙传输。这种技术被称为 androidbeam。所以使用 androidbeam 传输数据的两部设备不再限于4厘米之内。
二、android 对 nfc 的支持
不同的 nfc 标签之间差异很大,有的只支持简单的读写操作,有时还会采用支持一次性写入的芯片,将 nfc 标签设计成只读的。当然,也存在一些复杂的 nfc 标签,例如,有一些 nfc 标签可以通过硬件加密的方式限制对某一区域的访问。还有一些标签自带操作环境,允许 nfc 设备与这些标签进行更复杂的交互。这些标签中的数据也会采用不同的格式。但 android sdk api 主要支持 nfc 论坛标准(forum standard),这种标准被称为 ndef(nfc data exchange format,nfc 数据交换格式)。
ndef 格式其实就类似于硬盘的ntfs,下面我们看一下 ndef 数据:
(1)ndef数据的操作
android sdk api支持如下3种ndef数据的操作:
1)从nfc标签读取ndef格式的数据。
2)向nfc标签写入ndef格式的数据。
3)通过android beam技术将ndef数据发送到另一部nfc设备。
用于描述ndef格式数据的两个类:
1)ndefmessage:描述ndef格式的信息,实际上我们写入nfc标签的就是ndefmessage对象。
2)ndefrecord:描述ndef信息的一个信息段,一个ndefmessage可能包含一个或者多个ndefrecord。
ndefmessage和ndefrecord是android nfc技术的核心类,无论读写ndef格式的nfc标签,还是通过android beam技术传递ndef格式的数据,都需要这两个类。
(2)非ndef数据的操作
对于某些特殊需求,可能要存任意的数据,对于这些数据,我们就需要自定义格式。这些数据格式实际上就是普通的字节流,至于字节流中的数据代表什么,就由开发人员自己定义了。
(3)编写nfc程序的基本步骤
1)设置权限,限制android版本、安装的设备:
2)定义可接收tag的activity,配置一下launchmode属性:
三、实战使用nfc标签
(1)利用nfc标签让android自动运行程序
场景是这样的:现将应用程序的包写到 nfc 程序上,然后我们将 nfc标签靠近 android 手机,手机就会自动运行包所对应的程序,这个是nfc 比较基本的一个应用。下面以贴近标签自动运行 android 自带的“短信”为例。
向nfc标签写入数据一般分为三步:
1)获取tag对象
2)判断nfc标签的数据类型(通过ndef.get方法)
3)写入数据
实际运行效果如下:
操作步骤:
点击自动打开短信界面或百度页面,进入对应 activity,将 nfc 标签贴近手机背面,提示写入成功。返回主界面,再将 nfc 标签贴近手机背面,便能看到自动打开短信或者打开百度页面。
四、ndef 文本格式深度解析
获取 nfc 标签中的数据要通过 ndefrecord.getpayload 方法完成。当然,在处理这些数据之前,最好判断一下 ndefrecord 对象中存储的是不是 ndef 文本格式数据。
(1)判断数据是否为ndef格式
1)tnf(类型名格式,type name format)必须是ndefrecord.tnf_well_known。
2)可变的长度类型必须是ndefrecord.rtd_text。
如果这两个标准同时满足,那么就为ndef格式。
(2)ndef文本格式规范
不管什么格式的数据本质上都是由一些字节组成的。对于ndef文本格式来说,这些数据的第1个字节描述了数据的状态,然后若干个字节描述文本的语言编码,最后剩余字节表示文本数据。这些数据格式由nfc forum的相关规范定义,可以通过 http://members.nfc-forum.org/specs/spec_dashboard 下载相关的规范。
下面这两张表是规范中 3.2节 相对重要的翻译部分:
实现 nfc 标签中的文本数据的读写操作:
点击写 nfc 标签中的文本数据,跳转到对应的 activity,将 nfc 标签卡贴近手机,写入成功后会提示,再退回主页面,选择读文本数据,便可读取。
五、非 ndef 格式(操作步骤如上图,具体实现查阅项目代码)
六、ndef uri格式存储(操作步骤如上图,具体实现可查阅项目代码)
mifareultraligh t数据格式:将 nfc 标签的存储区域分为16个页,每一个页可以存储4个字节,一个可存储64个字节(512位)。页码从0开始(0至15)。前4页(0至3)存储了nfc标签相关的信息(如nfc标签的序列号、控制位等)。从第5页开始存储实际的数据(4至15页)。使用mifareultralight.get 方法获取 mifareultralight 对象,然后调用mifareultralight.connect 方法进行连接,并使用mifareultralight.writepage 方法每次写入1页(4个字节)。
也可以使用 mifareultralight.readpages 方法每次连续读取 4 页。如果读取的页的序号超过 15,则从头开始读。例如,从第 15 页(序号为14)开始读。readpages 方法会读取 14、15、0、1页的数据。
github 链接
推荐阅读
-
android模拟器开发和测试nfc应用实例详解
-
粮草先行——Android折叠屏开发技术点(一)
-
Android开发中如何利用 APT 技术在编译期生成代码
-
基于Android NFC传感器读取身份证信息demo
-
Android 开发技术周报 Issue#276
-
粮草先行——Android折叠屏开发技术点(二)
-
android,meego和iPhone技术比较与开发前景 MeeGoAndroidIT厂商Qt中国移动
-
android,meego和iPhone技术比较与开发前景 MeeGoAndroidIT厂商Qt中国移动
-
《 NFC:Arduino、Android与PhoneGap近场通信》 试读
-
《 NFC:Arduino、Android与PhoneGap近场通信》 试读