在 Android4.4之前,NFC支付过程需要通过借助设备上一个专有的安全部件(Secure Element,可以存在SIM卡中),使用本地存储的方式,关联设备本身的某种支付方式。这样的话其它的APP就很难通过NFC进行支付操作,因为这个 过程是依靠部分硬件的,也就是Secure Element,现在的问题就是像Sprint通信公司或者Verizon通信公司的这个载体部件,应该让APP可以使用这个硬件功能。 基于主机的卡仿真技术基于主机的卡仿真(HCE)是Android4.4的一项新技术,可以让app绕过Secure Element,然后使用云端支付信息或者其它方式存储的支付信息来模拟一个NFC卡。有了HCE,任何APP都可以模拟一个NFC卡,而且任意一台 Android设备可以当做NFC读写器。 检测HCE功能就需要看看 FEATURE_NFC_HOST_CARD_EMULATION。
需要在AndroidManifest.xml中声明应用程序需要使用HCE功能:
HCE需要实现为一个服务(service),Android中的服务可以运行在后台,启动后不用和用户进行交互。此服务可以让NFC在使用时不需要用户首先打开APP。在Android4.4中新增了HostApduService,继承它然后创建一个服务来处理近场通讯:
这个NfcHceService需要覆盖两个方法:processCommandApdu()和onDeactivated()。 APDU(Application Protocol Data Unit)是NFC读写器发送给NfcHceService的数据单元,然后processCommandApdu()方法回送一个响应APDU。在 NFC读写器和另外一个HCE服务通信或者设备不在NFC读写器的范围内时,onDeactivated()方法会被调用。 注意还要在AndroidManifest.xml中声明服务:
这个hceService.xml资源文件在meta-data标签里声明,告诉Android系统到哪里去寻找Application的ID组。 |