NFC,即Near Field Communication,近距离无线通信技术,是一种短距离的(通常<=4cm或更短)高频(13.56MHz)无线通信技术,它提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。NFC的技术优势如下。
与蓝牙相比:NFC操作简单,配对迅速。
与RFID相比:NFC适用范围广泛、可读可写,能直接集成在手机中。
与红外线相比:数据传输较快、安全性高、能耗低。
与二维码相比:识别迅速、信息类型多样。
将来与移动支付相结合,势必简化支付的购买流程,重塑消费者的购物模式。
NFC近场通信全方位的测量精度可以达到厘米。这项技术也促进了其他一些有意思的技术的成长,比如把两个手机碰到一起,可以启动多人游戏,把手机贴近NFC读写器可以进行付款。
在Android4.4之前,NFC支付过程需要借助设备上一个专有的安全部件(Secure Ele-ment,可以存在SIM卡中),使用本地存储的方式,关联设备本身的某种支付方式,这样的话,其他的App很难通过NFC进行支付操作,因为这个过程是依靠部分硬件的,也就是Se-cure Element。基于主机的卡仿真(HCE)是Android 4.4的一项新技术,可以让App绕过Secure Element,然后使用云端支付信息或者其他方式存储的支付信息来模拟NFC卡。有了HCE,任何App都可以模拟NFC卡,而且任意一台Android设备都可以当作NFC读写器。
这项技术由免接触式射频识别(RFID)演变而来,由飞利浦公司和索尼公司共同开发,是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC和智能控件工具间进行近距离无线通信。
近场通信是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内。其传输速度有106Kbit/秒、212Kbit/秒和424Kbit/秒三种。目前近场通信已成为ISO/IECIS18092国际标准、EMCA-340标准与ETSI TS 102 190标准。
消费者可以使用支持该技术的手机在公交、地铁、超市进行刷卡消费,此项技术早年曾在诺基亚6131i等产品上出现,在北京、广州、厦门等城市已有成功使用先例。
NFC有如下三种工作模式。
(1)卡模式(Card emulation):这个模式的手机其实就相当于一张采用RFID技术的IC卡,可以替代现在大量的IC卡(包括信用卡)。此种方式有一个极大的优点,就是卡片通过非接触读卡器的RF域来供电,即便是寄主设备(如手机)没电也可以工作。
(2)点对点模式(P2P mode):这个模式和红外线差不多,可用于数据交换,只是传输距离比较短,传输创建速度快很多,传输速度也快一些,功耗低。将两个具备NFC功能的设备链接,能实现数据点对点传输,如下载音乐、交换图片或者同步设备地址簿。因此,通过NFC,多个设备如数字相机、PDA、计算机、手机之间,可以交换资料或者服务。
(3)读卡器模式(Reader/writer mode):作为非接触读卡器使用,比如从海报或者展览信息电子标签上读取相关信息。
NFC技术可以说是RFID技术的一个延伸,说起RFID技术,大家可能摇摇头说没听过。实际上它已经大量地应用在我们的生活当中,城市的公交系统、大学的水卡、饭卡、旅馆的门禁都是RFID技术的应用。不过RFID只能实现信息的读取以及判定,而NFC技术则强调的是信息交互。通俗的说,NFC就是RFID的演进版本,可以近距离交换信息。
在Android NFC应用中,Android手机通常是作为通信中的发起者,也就是作为各种NFC卡的读写器。Android对NFC的支持主要在android.nfc和android.nfc.tech两个包中,如图10-12所示。
Android.nfc包中有如下几种主要类。
(1)NfcManager:可以用来管理Android设备中指出的所有NfcAdapter,但由于大部分Android设备只支持一个Nf-cAdapter,所以一般直接调用getDefaultAapater来获取手机中的Adapter。
(2)NfcAdapter:相当于一个NFC适配器,类似于电脑装了网络适配器才能上网,手机装了NfcAdapter才能发起NFC通信。
(3)NDEF:NFCData Exchange Format,即NFC数据交换格式。
(4)NdefMessage和NdefRecord:NFC forum定义的数据格式。
(5)Tag:代表一个被动式Tag对象,可以代表一个标签、卡片等。当Android设备检测到一个Tag时,会创建一个Tag对象,将其放在Intent对象,然后发送到相应的Activity。
(6)Android.nfc.tech:定义了可以对Tag进行读写操作的类,这些类按照其使用的技术类型可以分成不同的类,如NfcA、NfcB、NfcF,以及MifareClassic等,其中MifareClassic比较常见。
(7)Ndef:NFC Data Exchange Format,即NFC数据交换格式。Android支持的NFC的数据格式类如表10-2所示。
图10-12 Android的NFC库
表10-2 Android支持的NFC的数据格式类
检测到标签后,在Activity中的处理流程如下。
(1)在onCreate()中获取NfcAdapter对象,代码如下。
Nf cAdapter nfcAdapter=Nf cAdapter.getDe faultAdapter(this);
(2)取出封装在Intent中的Tag,代码如下。
Tag tagFromIntent=intent.getParcelableExra(NfcAdapter.EXTRA TAG);(www.xing528.com)
(3)读取Tag,代码如下。
(4)允许进行标签操作:mfc.connect()。
(5)标签的相关操作。
获取Tag的类型:inttype=mfc.getType()。
获取Tag中包含的扇区数:int sectorCount=mfc.getSectorCount()。
扇区密码验证:auth=mfc.authenticateSectorWithKeyA(j,MifareClassic.KEYDEFAULT)。
读扇区:mfc.readBlock(bIndex)。
命令读写:mfc.transceive(cmd.getBytes()),参数为读写操作的命令。
在本实例中,使用MifareClassic卡进行数据读取测试。在Android 2.3中创建应用项目:NECTEST。
MifareClassic卡的数据分为16个区(Sector),每个区有4个块(Block),每个块可以存放16字节的数据。每个区最后一个块称为Trailer,主要用来存放读写该区Block数据的Key,可以有A、B两个Key,每个Key长度为6个字节,缺省的Key值一般为全FF或是0,由MifareClassic.KEY_DEFAULT定义。因此,读写MifareTag首先需要有正确的Key值(起到保护的作用),只有鉴权成功,之后才可以读写该区数据。
具体实现步骤如下。
(1)总配置文件AndroidManifest.xml的代码如下。
(2)新建文件res/xml/nfc_tech_filter.xml,代码如下。
当手机开启了NFC,并且检测到一个Tag后,Tag分发系统会自动创建一个封装了NFC Tag信息的Intent。如果多于一个应用程序能够处理这个Intent,那么手机会弹出一个对话框,让用户选择处理该Tag的Activity。Tag分发系统定义了3种Intent,按优先级从高到低排列为:NDEF_DISCOVERED、TECH_DISCOVERED、TAG_DISCOVERED
当Android设备检测到有NFCTag靠近时,会根据Action声明的顺序向对应的Activity发送含NFC消息的Intent。
此处,我们使用的intent-filter的Action类型为TECH_DISCOVERED,从而可以处理所有类型为ACTION_TECH_DISCOVERED并且使用的技术为nfc_tech_filter.xml文件中定义的类型的Tag。
当手机检测到一个Tag时,启用Activity的匹配过程如图10-13所示。
图10-13 Tag的Activity匹配过程
(3)主布局文件main.xml的代码如下。
(4)在strings.xml文件中增加如下内容。
(5)界面处理文件MainActivity.java的代码如下。
(6)执行结果如图10-14所示。
图10-14 执行结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。