网站建设资讯

NEWS

网站建设资讯

深入分析AndroidNFC技术androidnfc开发-创新互联

从概念,实现原理以及最红实现的源码等有助于大家对NFC技术有更深入的理解。

创新互联专业成都网站设计、网站建设,集网站策划、网站设计、网站制作于一体,网站seo、网站优化、网站营销、软文发稿等专业人才根据搜索规律编程设计,让网站在运行后,在搜索中有好的表现,专业设计制作为您带来效益的网站!让网站建设为您创造效益。

NFC 是 Near Field Communication 缩写,即近距离无线通讯技术。可以在移动设备、消费类电子产品、PC 和智能控件工具间进行近距离无线通信。简单一点说,nfc 功能是什么?nfc功能有什么用?其实NFC提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。NFC 技术允许电子设备之间进行非接触式点对点数据传输,在十厘米(3.9英吋)内,交换数据,其传输速度有106Kbit/秒、212Kbit/秒或者424Kbit/秒三种。接下来我们更加详细的来了解一下nfc的应用。

深入分析Android NFC技术 android 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技术 android nfc开发

二、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版本、安装的设备:

深入分析Android NFC技术 android nfc开发

2)定义可接收Tag的Activity,配置一下launchMode属性:

深入分析Android NFC技术 android nfc开发

三、实战使用NFC标签

(1)利用NFC标签让Android自动运行程序

场景是这样的:现将应用程序的包写到 NFC 程序上,然后我们将 NFC标签靠近 Android 手机,手机就会自动运行包所对应的程序,这个是NFC 比较基本的一个应用。下面以贴近标签自动运行 Android 自带的“短信”为例。

向NFC标签写入数据一般分为三步:

1)获取Tag对象

深入分析Android NFC技术 android nfc开发

2)判断NFC标签的数据类型(通过Ndef.get方法)

3)写入数据

深入分析Android NFC技术 android nfc开发

实际运行效果如下:

操作步骤:

点击自动打开短信界面或百度页面,进入对应 Activity,将 NFC 标签贴近手机背面,提示写入成功。返回主界面,再将 NFC 标签贴近手机背面,便能看到自动打开短信或者打开百度页面。

深入分析Android NFC技术 android nfc开发

深入分析Android NFC技术 android nfc开发

深入分析Android NFC技术 android 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节 相对重要的翻译部分:

深入分析Android NFC技术 android nfc开发

实现 NFC 标签中的文本数据的读写操作:

深入分析Android NFC技术 android nfc开发

深入分析Android NFC技术 android nfc开发

点击写 NFC 标签中的文本数据,跳转到对应的 Activity,将 NFC 标签卡贴近手机,写入成功后会提示,再退回主页面,选择读文本数据,便可读取。

深入分析Android NFC技术 android nfc开发

深入分析Android NFC技术 android 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页的数据。

深入分析Android NFC技术 android nfc开发

github 链接


项目源码地址:
https://github.com/RickyYu/Nfc-Android


名称栏目:深入分析AndroidNFC技术androidnfc开发-创新互联
当前路径:http://njwzjz.com/article/idese.html