导航:首页 > 操作系统 > androidnfc架构

androidnfc架构

发布时间:2023-04-29 08:08:06

android 怎样支持nfc

nfc需要硬件支持,选择带有nfc功能的android手机就可以了。

nfc这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司)、诺基亚和索尼共同研制开发,其基础是RFID及互连技术。近场通信(Near Field Communication,NFC)是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内。其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。目前近场通信已通过成为ISO/IEC IS 18092国际标准、ECMA-340标准与ETSI TS 102 190标准。NFC采用主动和被动两种读取模式。
NFC近场通信技术是由非接触式射频识别(RFID)及互联互通技术整合演变而来,在单一芯片上结合感应式读卡器、感应式卡片和点对点的功能,能在短距离内与兼容设备进行识别和数据交换。工作频率为13.56MHz.但是使用这种手机支付方案的用户必须更换特制的手机。目前这项技术在日韩被广泛应用。手机用户凭着配置了支付功能的手机就可以行遍全国,用户的手机可以用作机场登机验证、大厦的门禁钥匙、交通一卡通、信用卡、支付卡等等!

Ⅱ 安卓NFC有什么用NFC功能有什么玩法

安卓手机不能使用apple pay,但是支持银联的云闪付,同时手机需要带有NFC功能,那么这个NFC是什么呢?有什么用呢?除了闪付功能还有什么其他的用吗?
不同于 iOS 用户的 NFC 模块只能用于支付,由于 Android 上 NFC 相关 API 是开放的,Android上也有许多 NFC 新的玩法,这也为 Android 的 NFC 带来许多不同的可能性。
解锁手机:是的你没有看错,Android 、带有 Google Play 服务以及 NFC 模块的设备都能够使用 NFC 解锁手机。在系统设置中选择安全,并进入 SmartLock,选择‘信任的设备’并添加一个 NFC 解锁设备。此处的‘NFC 解锁设备’并不仅局限于 NFC 标贴,你的门禁卡、公交卡、饭卡等等都可以作为解锁手机的‘钥匙’。
查询/充值公交卡:微信与支付宝在一年多以前就可以通过 NFC 服务为公交卡进行余额查询和充值。将公交卡贴在手机背面,手机会自动跳转至微信或支付宝,然后执行查询或充值操作。支付宝的余额查询功能可以查询全国 各大城市通用标准公交卡中。充值功能根据不同的 app 有不同的政策与支持地区。
传输文件:这应该是 Android NFC 最为令人津津乐道的功能了。通过基于 NFC 的 Android Beam 功能,两台兼容的 Android 设备可以互相进行数据传输。只需要将欲分享的内容打开,并将两台手机背对背靠好,点击屏幕就能完成分享。
甚至还可以自动完成任务。对于高玩来说,Android NFC 可以做到离线版 IFTTT,自动化进行某些操作。通过 Tasker app 以及其他支持 NFC 的自动化 app,用户可以使用 NFC 标贴来作为 task trigger(任务触发器),做到 Wi-Fi 网络切换、快速静音、快速设定闹钟等等操作。

Ⅲ android的NFC

  1. android安卓NFC 做了一个通过nfc读取卡的app,只要nfc卡一刷就启动activity。 但是想在我手动开启主程序时才开启NFC接收功能, 并在主程序关闭时结束NFC接收。 不知道如何实现, 现在我的思路是通过操作nfcadpter 或 开关nfc权限(permission)。

Ⅳ android几开始支持的nfc

2010年安卓系统开始支持NFC。2020年8月,微信安卓版开放全面开放NFC权限,小程序(微信的5.0版本以上)应用可使用NFC功能。2020年12月开始内测,鸿蒙系统HarmonyOS元应用,使用NFC靠一靠,调起快应用(无需开启app)。

Ⅳ NFC在Android中的应用

什么是NFC?Google一大坨,网络一大坨烂激,我就不讲了,这里我只讨论技术细节。

首先我们先讨论一下这样的一个问题,当我们把NFC标签靠近手机,并且手机感应后,我们通过什么方式能得到NFC标签信息呢?答案就是通过Intent的饥野袜方式来获取。现在的需求是我想在启动一个Activity后通过读NFC的方式得到里面的信息。下面我来介绍具体做法。

通过分析需求得知,我们需要前台调度系统机制,这种机制允许Activity拦截Intent对象。

1.获取NfcAdapter
nfcAdapter= NfcAdapter.getDefaultAdapter(this);

2.构造PendingInent对象封装NFC标签信息
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

3.声明Intent对象的过滤器脊慎
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndef.addDataType("*/*"); } catch (IntentFilter.MalformedMimeTypeException e) { throw new RuntimeException("fail", e); }
4建立一个处理NFC标签技术的数组

5.这是最核心最重要的一步了,我们需要在Activity的onResume方法中调用nfcadapter的enableForegroundDispatch方法把上面的变量作为参数传递进来,
nfcAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters,mTechLists);
一旦NFC标签接触到手机,这个方法就会被激活。

6.最后我们需要在onNewIntent方法中处理Intent回调给我们的信息。
Parcelable[] rawArray = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage mNdefMsg = (NdefMessage) rawArray[0];//得到NdefMessage NdefRecord mNdefRecord = mNdefMsg.getRecords()[0];//得到NdefRecord

Ⅵ 谈谈目前常用的6种移动支付系统是哪些

Apple Pay:雷声大,雨还远
Apple Pay一经推出,在NFC领域中犹如“一石惊起千重浪”,整个行业简直沸腾了。不过由于种种原因,Apple Pay进入中国似乎还比较遥远,让很多“果粉”哭诉无门,真有点雷声大,而雨还远的意境,而且目前仅在美国适用,未来将推广到英国和韩国,至于何时中国用户能用上Apple Pay还不得而知。

回顾笔者知道NFC一词,应该还是在2010年的上海世博会期间,中国移动发布了手机钱包,揭开了我国手机钱包发展的序幕。同时也推出了世博会手机门票,客户需更换具有手机钱包功能的SIM卡,不换手机和号码,就能购买“世博手机票”,直接持手机进,入世博园区,并在世博园区内的合作商户进行消费支付,也让国人首次认识了手机支付。

但是,中国移动的手机钱包由于大环境的原因,面临使用不便、特约商户使用热情不高的问题。有“中行小达人”之称的陆金华表示:尽管中国的一些手机厂商们很早就涉足了NFC,但阻碍基于NFC标准的移动支付发展缓慢的原因,除了移动支付标准之争外,恐怕更重要的是参与NFC产业的各方都画地为牢,只想自己通吃整个产缺册业链,拒绝与他人合作共同做大市场。即便现在一些以NFC为核心的企业还在探讨NFC的前景,但似乎并没有找到医治顽疾的良方,倒是NFC越来越有边缘化的趋势。
ApplePay依托苹果这个业界龙头老大的背景强势闪亮登场,让NFC产业的参与者们顿时看到了一线生机,重新燃起了对NFC的期待。Apple Pay改变了之前产业链的生态环境,即与发卡银行、信用卡组织签订达成协议,如果消费者使用Apple Pay付款,苹果公司将从交易中抽取一定比例的分成,并且不向商户收取费用,但是这种模式恐怕对其进入中国市场产生了一定的阻碍作用。
HCE:来得快,待观察
2013年,Google发布Android 4.4 KitKat(奇巧)操作系统,使任何的Android NFC设备可在不需访问安全元素的前提下进行移动支付和其他安全应用。
Android 4.4的NFC支付与移动运营商引入了一个新的开放式架构,让应用程序在“云中”管理用户的付款信息,通过主机卡仿真(HCE)支持基于NFC的安全交易、付款及客户忠诚度计划,访问卡、交通卡和其他定制服务。任何Android设备上的应用程序都可以效仿NFC智能卡,让用户在设备没有设置安全元件(SE)的必要情况下点击启动与他们所选择的应用程序。应用程序也可使用一个新的阅读器作为读者的HCE卡和其他基于NFC的交易模式。

就在与Apple Pay进行合作不久,VISA和万事达卡又陆续宣布推出利用近场通信(NFC)提供新的姿迅移动支付方式——HCE。两者的规范虽然存在着一些差异,但相信在不久的将来,双方提出的HCE规范将会择优综合。
HCE的出现迹扮此让更多的消费者特别是安卓系统的用户,也可以像Apple Pay用户一样,只需用智能手机即可完成支付。

2015年5月5日,工行在北京与中国银联、VISA合作,推出亚洲地区首家HCE云支付信用卡产品。工行此次通过率先利用这项“颠覆性创新”的技术,搭建覆盖线下近场支付及线上远场支付一体化的便捷体验,有意站到移动支付的风口翩翩起舞。VISA的首张HCE应用的信用卡以与拥有“宇宙行”之称的工商银行合作,彰显了其对HCE的的姿态,工行对这张HCE云支付信用卡的目标剑指500万张,更是显出雄心勃勃。HCE来了,来得很快,但效果如何,还需要拭目以待。

银联闪付:起得早,醒的晚
中国银联在基于NFC方面的尝试也非常早,在2011年银联就推出基于NFC的银联支付标准——闪付,这种金融IC卡的非接触式支付也得到了大量POS机支持。据统计,支持银联闪付的POS终端已经占了相当大的市场份额,中国银联对商户POS方面拥有绝对的优势,这也是其它几种支付方式无可比拟的。可以说闪付的支付环境建设已经非常不错。

但是,由于种种原因,中国银联对闪付功能的设备应用、市场宣传,以及用户习惯培养方面做的非常不够,无论是持卡用户,还是特约商户,真正认识“闪付 QuickPass”标志和能顺畅使用的并不多。刚刚结束的银联“6.2优惠”活动中,尽管对使用闪付支付有很非常大的优惠措施,但是却有些“叫好不叫座”的感觉。闪付推出多年,也如同它的原型NFC一样,并没有培养起消费者使用闪付的习惯,很多标注“闪付QuickPass”标识的终端已经沦为摆设。

实际上从各种新兴支付的测试情况来看,使用银行卡的闪付功能是交易最为简便,而且也是最安全的移动支付方式,一来无需使用任何设备作为辅助工具,第二,无需向其它设备绑卡,提供主卡片信息。从2015年中国银联的一些举措来看,显示出其强力推广“闪付”的决心和勇气,虽然银联对闪付有些“起得早醒的晚”,但总算是醒了,对闪付的普及我们拭目以待。

EMV:非接付,属“老大”
1999年2月,当时的Europay(欧陆卡)、万事达卡和Visa共同成立了EMVCo组织,共同发起制订的银行卡从磁条卡向智能IC卡转移的技术标准,是基于IC卡的金融支付标准,已成为公认的全球统一标准。在EMV标准的基础上,万事达卡和VISA又推出了各自的非接触式支付系统PayPass和PayWave。

EMV2000标准是国际上金融IC卡借记/贷记应用的基础性技术标准,亦是公认的框架标准,目前的正式发布的版本有EMV96和EMV2000。中国银联于2013年5月20日正式加入这一标准体系。2014年3月,EMVCo组织发布了Tokenization标准,苹果公司于同年9月发布Apple Pay,率先支持这一标准,之后VISA、万事达、中国银联、谷歌等卡组织于第三方支付机构也纷纷开始支持这一标准,这将提高手机支付与在线支付的安全性和便利性。

支付宝:追时尚,抢市场
支付宝支付是二维码支付的代表,二维码支付是一种基于账户体系搭起来的新一代无线支付方案。韩国与日本是使用二维码支付比较早的国家,韩日两国的二维码支付技术已经普及了95%以上。
支付宝由于缺乏线下POS机的优势,单凭线下收单业务已经没有“油水”。另外,支付宝意在打造自己的一套支付系统,才是其在2013年终止线下收单业务的根源。从这两年支付宝的市场举措来看,全力打造以二维码支付为核心的支付生态系统业已逐渐成形。同时,二维码支付的使用环境建设也已经成为热点,一些厂商的POS机也已经兼容了二维码支付流程。

二维码支付手段在国内兴起并不是偶然,形成背景主要与我国移动互联网的兴起、IT技术的快速发展,以及电子商务的快速推进息息相关。有了先进的移动终端设备的支持,更有了移动互联网催生的移动消费中大量的支付需求,凭借时尚、便捷的客户体验,在支付领域得到了市场中年轻一代消费者的追捧,推动了二维码支付已经成为了移动支付的主力军。
2014年3月,央行从客户支付安全的角度考虑,下发紧急文件叫停了条码(二维码)支付等面对面支付服务。但实际上支付宝二维码支付并没有真正停止过,二维码支付的布局和优惠活动依旧紧锣密鼓地开展。或许市场的选择是最有力的结果,未来多种支付手段并存的局面即将到来。
微信支付:既生瑜,何生亮
微信支付与支付宝支付同出一辙,主打二维码支付。从市场中实际看到的一些情况中,似乎微信支付没有它的对手一般张扬,或许是忌惮央行的一纸禁令,而在悄悄地布局,但凭借在移动互联网行业中的地位,得到移动支付领域的一席之地还是很轻松的。
尽管微信支付与支付宝支付很多相似之处,但是也各有特长。微信支付,是依托强大的微信圈为基础,为直接的用户支付提供应用场景的生态体系。支付宝支付更侧重为支付工具。但是二者已经在很多地方越来越趋同了。也许深有“既生瑜何生亮”的感叹。

Ⅶ 3.安卓NFC开发-解析数据(效果篇)

解析茄烂数据效果图如下,把公交颤樱漏卡靠近手机,弹出了NFC操作的可选列表,打开自己的应用NFCap,读取到卡颂态号、卡名、余额、交易记录,效果图如下:

具体如何实现,后面专门解析。

Ⅷ 手机中的NFC功能,你会用么附使用方法与技巧

在现在看来,各厂商旗舰手机的标配之中就有NFC功能的缩影,NFC功能的大大普及,给我们的生活来带极大的方便,摆脱了传统携带公交卡、银行卡的习惯,一个配置NFC功能的手机即可全部搞定。NFC功能为什么有这么大的魔力呢,首庆棚虚先我们先来看看NFC功能如何出现的,NFC全称Near Field Communication,定义为近距离无线通信,起初有成立泛欧联盟,开发NFC的开放式架构,并推动在手机中的应用。

NFC(简称近场通信)是一种短距高频的无线电技术,在13.56MHz频率运行于10厘米距离内。其传输速度有106 Kbit/秒、212 Kbit/秒或者424 Kbit/秒三种。目前近场通信已通过成为ISO/IEC IS 18092国际标准、ECMA-340标准与ETSI TS 102 190标准。NFC采用主动和被动两种读取模式。在现在看来,这项技术被广泛的应用,在手机上可以充当公交卡、门禁钥匙、移动支付、身份识别、传输数据等。

从其功能上不难看出,一块小小的NFC芯片,可以实现这么多功能,也是其便利的和碧所在。今天笔者以小米手机 6作为当年的旗舰手机为例,介绍这个NFC功能的实用性和小技巧,希望能给读者带来方便。

使用NFC功能来进行传输文件用户几乎很少很少,不如蓝牙来得快,且在传输速度上蓝牙比NFC要快,理论是NFC传输速度在424Kbps,蓝牙在1Mbps;传输距离上,NFC传输距离是0-10cm,蓝牙是0-10m,NFC传输比较适用于一些敏感信息或个人数据的传输等,蓝牙比较适合长距离的文件传输等;在安全性上,NFC具备优势。笔者在测试NFC传输过程中必须两台手机紧贴在一起,不然会导致数传中断,从而引起重复操作等,再者如果没有手机支持NFC功能,相比还是蓝牙来得快。

操作方法:打开NFC功能—再打开“Android Beam”功能—两手机同时触碰即可显示传输文件的操作方法。

有了这个功能之后,大大节约的人们的出行效率,一个手机就能搞定,同时在不定期时间也会有开卡免费的活动。自带公交卡功能这还是其中的一个方面,如果余额不足怎么办?手机支持充值公交卡,很方便也很实用。不过需要注意的是,刷公交必须打开NFC功能哦,总体来看,手机公交卡,具有其便捷性性优点,但如果手机被盗,也是一个鸡肋。

操作方法:需要在手机上开通公交卡功能(最近开通岭南通的公交卡免开发费哦)才能享有此功能。

1.微信充值


打开手机NFC功能(微信中NFC功能也需开启),将公交卡紧贴手机,之后会弹出界面,选择“微信”,选择充值金额,然后支付,充值即可;当然你也可以直接在微信支付界面—生活缴费—公交卡充值进行操作。需要注意的是,在充值的过程中公交卡需要紧贴手机。不过目前来看,微信支持公交卡充值的城市有武汉(武汉通)、北京(北京一卡通)、广州(羊城通/岭南通)、深圳(深圳通)

2.手机QQ充值

手机QQ充值与微信的充值方式是差不多的,将公交卡紧贴手机,之后会弹出界面,选择“QQ”,选择充值金额,然后支付,充值即可。需要注意的是,在充值的过程中公交卡需要紧贴手机,以保证充值能成功。QQ充值的话,需要基于支持的手机,比如小米2A、小米3...我震惊了。。

3.岭南通APP

岭南通APP是由岭南通公司自主开发的一款APP,具有查询服务网点、记录查询、在线充值等功能,不仅可以对卡片进行NFC充值,卡片的余额、消费记录查询也更加便捷!有2种查询方式可供选择:NFC手机可以直接读卡,其他手机可输入卡号查询。是你的手快还是手机读卡速度更快?

4.支付宝充值

在手机上登录支付宝, 选择【城市一卡通】(也可以直接搜索),需要注意的是城市一卡通九宫格入口是安卓的用户都能看到,ios的不支持;然后使用公交卡紧贴于手机,进行读取和充值,如果付款完成之后,没有将卡贴在手机背面,页面会提示贴卡,在15秒内没有贴卡,则提示是否继续充值,按【取消】,充值金额会退回到用户支付宝账户,誉燃点【确定】会重新进入15秒到计时贴卡页面。需要注意的是,支付宝的公交卡充值适配不是很全,部分公交卡无法实现充值的,需要借助于其他方法。


当然你也可以进行银行手机端进行充值,在开启NFC之后,需要将公交卡贴于手机NFC处,会有窗口弹出,用户可以选择需要进行充值的应用。除此之外,我们还可以使用“完美校园”,“微信”等APP对饭卡、燃气卡等进行充值,充值不用再排长龙,卡片轻轻一贴,充值立马完成。



门禁卡是现在社区一种安全管理的方式之一,出去进来都是需要刷门禁卡的,出去忘记携带是一个麻烦事,尤其是走访亲戚朋友,门卫又不认识你,本来想给朋友一个惊喜的,变成朋友给你一个“惊喜”。那么NFC支持模拟门禁卡可谓是一个通行证了,外出你的手机肯定要随着你,如果手机忘带了,真没办法了。

1.录入实体卡

打开小米钱包,选择小米门卡,点击右下角的添加,然后选择门卡,再根据提示将门禁卡贴于感应区,后续根据提示完成即可,支持普通门卡、异形门禁卡,在换出公交卡的界面,是有门禁卡存在的,目前仅支持模拟市面上未经过加密且频率为13.56MHZ的门卡,需要注意的是部分门禁卡是有加密功能,是无法进行复制模拟的,这就需要采用第2种办法。

2.自定义空白卡

模拟门卡首个支持场景为自定义空白卡,用户选择后可向上直接发门卡到手机,该场景下用户开卡后需要到线下(小区物业、学校或其他线下场景)由工作人员写入数据开通权限即可使用手机刷卡开门。用户需要注意的是在线下开通门禁权限需要小区业主提供相关的证明,不然一般的物业不会给你这个权限的。

3.智能门锁卡

用户在小米手机中开通米家智能门锁后,即可使用手机刷卡开门,开通完成之后,需要用户打开米家APP,进入设备管理界面,激活门锁为米家NFC卡,分配钥匙后,即可使用手机刷卡开门。同时为了保证安全,刷卡时需要验证指纹。但现在只支持米家门锁,建议后期对第三方的门锁采取同样的支持。



第三方Mi Pay是小米钱包提供的手机支付功能,使用支持NFC的小米手机,通过带有银联“云闪付”标志的POS机即可支付交易。Mi Pay已支持中国银行、中国工商银行、等全国74家银行,实现了对主流银行的全覆盖,并仍在不断拓展。除支付外,Mi Pay还在不断拓展其使用场景,如ODA、线上有卡支付、碰一碰支付等功能都在一定程度上简化了支付流程,优化了使用体验。使用之前需要绑定支持云闪付的银行卡即可(银行卡上会有标识的,如Quick 闪付 Pass)。

总结:NFC功能已经在日常的生活中发挥着越来越重要的作用,比如有NFC模块的POS机进行便捷支付、具备闪付功能的ATM机能够支持无卡取款、共享单车支持NFC接触解锁等,具备NFC功能的手机越来越多,只有全面的认知和了解它,才能发挥它的巨大作用,不然你当它是摆设么?未来,相信厂家将持续对手机NFC做更多有益尝试和 探索 ,为用户带来便利。NFC还具备哪些使用方法和技巧么,欢迎讨论。

Ⅸ Android的各个版本分别对NFC有什么支持

Android 2.1
主要特性:提升硬件速度 更多屏幕以及分辨率选择 大幅度的用户界面改良支持 Exchange活动墙纸 大幅改进虚拟键盘 蓝牙 2.1 Google 地图
Android 2.2
相对于上一版本的 改变: 1、整体性能大幅度的提升 2、3G网络共享功能。 3、Flash的支持。 4、App2sd功能。 5、全新的软件商店。 6、更多的Web应用API接口的开发。

Android 2.3
主要更新包括: 游戏:增加了新的垃圾回收和优化处理事件,以提高对游戏的支持能力。原生代码可直接存取输入和感应器事件、EGL/OpenGL ES、OpenSL ES。新的管理窗口和生命周期的框架。 多媒体:支持VP8和WebM视频格式,提供AAC和AMR宽频编码,提供了新的音频效果器,比如混响、均衡、虚拟耳机和低频提升 通讯方式:支持前置摄像头、SIP/VOIP和NFC(近场通讯) 站在用户的角度看,这次更新的亮点主要有: 简化界面、速度提升: 更快更直观的文字输入: 一键文字选择和复制/粘帖: 改进的电源管理系统: 新的应用管理方式: 原生支持前置摄像头、互联网通话和NFC(近场通讯): 系统原生支持VoIP,可以在联系人里加入它的SIP帐户,然后直接通过系统来拨打VoIP电话。 增加下载管理器。

也就是说,在用户自己使用方面,早期版本第三方软件只能安装在手机内存上,2.2,2.3就可以安装在内存卡上了,手机硬件相应配置也有相当大的提高。

Ⅹ NFC开发(一)——HCE基于主机的卡模拟简述

许多提供NFC功能的基于Android的设备已经支持NFC卡模拟。在大多数情况下,该卡由设备中的单独芯片模拟,称为 安全元件(Secure Element) 。无线运营商提供的许多SIM卡还包含安全元件(Secure Element)。

Android 4.4引入了另一种卡模拟方法,它不涉及SE,称为 基于主机的租芹卡模拟 。这允许任何Android应用程序模拟卡并直接与NFC读卡器通话。本文档描述了基于主机的卡肢型裂仿真(HCE)如何在Android上工作,以及如何使用此技术开发模拟NFC卡的应用程序。

当使用安全元件(Secure Element)提供NFC卡模拟时,将通过Android应用程序将要模拟的卡提供到设备上的安全元件(Secure Element)中。然后,当用户通过NFC终端握住设备时,设备中的NFC控制器将来自读卡器(NFC Reader)的所有数据直接路由到安全元件(Secure Element)。图1说明了这个概念。

安全元件(Secure Element)本身执行与NFC终端的通信,并且完全不涉及Android应用。交易完成后,Android应用程序可以直接查询SE的交易状态并通知用户。

当使用基于主机的卡仿真来仿真NFC卡时,数据将被路由到直接运行Android应用程序的主机CPU,而不是将NFC协议帧路由到SE。图2展示了基于主机的卡仿真如何工作。

NFC标准提供对许多不同协议的支持,并且可以模拟不同类型的卡。

Android 4.4支持当今市场上常见的几种协议。许多现有的非接触式卡已经基于这些协议,例如非接触式支付卡。这些协议也得到了当今市场上众多NFC读卡器的支持,其中包括Android NFC设备可以自己作为读卡器(请参见 IsoDep 课程)。这使您可以仅使用基于Android的设备在HCE周围构建和部署端到端NFC解决方案。

具体而言,Android 4.4支持基于NFC-Forum ISO-DEP规范(基于ISO / IEC 14443-4)的仿真卡,并处理ISO / IEC 7816-4规范中定义的应用协议数据历闭单元(APDU)。Android只强制在Nfc-A(ISO / IEC 14443-3 Type A)技术之上模拟ISO-DEP。支持Nfc-B(ISO / IEC 14443-4 Type B)技术是可选的。所有这些规格的分层如图3所示。

Android中的HCE体系结构基于Android Service 组件(称为“HCE服务”)。服务的一个关键优势是它可以在没有任何用户界面的情况下在后台运行。这对于许多HCE应用程序来说非常合适,例如会员卡或公交卡,用户不需要启动应用程序即可使用它。相反,通过NFC读卡器轻敲设备将启动正确的服务(如果尚未运行)并在后台执行该事务。当然,如果有意义的话,您可以自由地从您的服务中启动额外的UI(例如用户通知)。

当用户将设备连接到NFC读取器时,Android系统需要知道NFC读取器实际想要与哪个HCE服务通话。这就是ISO / IEC 7816-4规范的出处:它定义了一种选择应用程序的方式,以应用程序ID(AID)为中心。一个AID最多由16个字节组成。如果您正在模拟现有NFC读卡器基础架构的卡片,那么这些读卡器所寻找的AID通常是众所周知的并且是公开注册的(例如Visa和MasterCard等支付网络的AID)。

如果您想为自己的应用程序部署新的读卡器基础结构,则需要注册您自己的AID。AID的注册程序在ISO / IEC 7816-5规范中定义。如果您要为Android部署HCE应用程序,Google建议按照7816-5注册AID,因为它可以避免与其他应用程序发生冲突。

在某些情况下,HCE服务可能需要注册多个AID才能实现某个应用程序,并且需要确保它是所有这些AID的默认处理程序(而不是组中的某些AID转到其他服务) 。

一个AID组是应该被OS视为一起归属的AID列表。对于AID组中的所有AID,Android会保证以下其中一项:

换句话说,没有中间状态,组中的一些AID可以路由到一个HCE服务,另一些AID可路由到另一个。

每个AID组都可以与一个类别关联。这允许Android按类别将HCE服务组合在一起,并且反过来又允许用户在类别的级别而不是AID级别设置默认值。通常,避免在应用程序的任何面向用户的部分提及AID:它们对普通用户没有任何意义。

Android 4.4支持两种类别: CATEGORY_PAYMENT (涵盖行业标准支付应用程序)和 CATEGORY_OTHER (对于所有其他HCE应用程序)。

要使用基于主机的卡仿真来模拟NFC卡,您需要创建一个 Service 处理NFC事务的组件。

您的应用程序可以通过检查 FEATURE_NFC_HOST_CARD_EMULATION 功能来检查设备是否支持HCE 。您应该 <uses-feature> 在应用程序清单中使用该标记来声明您的应用程序使用HCE功能,以及该应用程序是否需要运行。

Android 4.4带有一个便利的 Service 类,可以作为实现HCE服务的基础: HostApService 类。

因此,第一步要扩大 HostApService 。

HostApService 声明了两个需要重写和实现的抽象方法。

processCommandAp() 只要NFC读卡器将应用协议数据单元(APDU)发送到您的服务,就会调用它。APDU也在ISO / IEC 7816-4规范中定义。APDU是在NFC读卡器和您的HCE服务之间交换的应用级数据包。该应用级协议是半双工的:NFC读卡器会向您发送命令APDU,并等待您发送响应APDU作为回报。

如前所述,Android使用AID来确定读者想要与哪个HCE服务交谈。通常,NFC读卡器向您的设备发送的第一个APDU是“SELECT AID”APDU; 这个APDU包含读卡器想与之交谈的AID。Android从APDU中提取AID,将其解析为HCE服务,然后将该APDU转发给已解析的服务。

您可以通过返回响应APDU的字节来发送响应APDU [processCommandAp()]( https://developer.android.com/reference/android/nfc/cardemulation/HostApService.html#processCommandAp(byte[] , android.os.Bundle))。请注意,此方法将在应用程序的主线程中调用,该线程不应被阻止。所以如果你不能立即计算并返回一个响应APDU,那么返回null。然后,您可以在另一个线程上完成必要的工作,并 sendResponseAp() 在完成后使用 HostApService 该类中定义的方法发送响应。

Android会继续将新的APDU从读取器转发到您的服务,直到:

在这两种情况下,你的类的 onDeactivated() 实现都是通过一个参数来调用的,这个参数指出了两者中的哪一个发生了。

如果您正在使用现有的读卡器基础架构,则需要实现读卡器在您的HCE服务中期望的现有应用程序级协议。

如果您正在部署您控制的新读卡器基础架构,则可以定义自己的协议和APDU序列。通常,尝试限制APDU数量和需要交换的数据大小:这样可以确保用户只需将设备通过NFC读取器持续一段时间即可。合理的上限约为1KB的数据,通常可以在 300ms 内交换。

您的服务必须像往常一样在清单中声明,但还必须在服务声明中添加一些附加件。

首先,为了告诉平台它是一个实现 HostApService 接口的HCE服务 ,你的服务声明必须包含一个 SERVICE_INTERFACE 动作的 Intent Filter 。

另外,为了告知平台哪个AIDs组被这个服务请求,一个 SERVICE_META_DATA <meta-data> 标签必须包含在服务的声明中,指向一个XML资源和关于HCE服务的附加信息。

最后,您必须将该 android:exported 属性设置为true,并且 "android.permission.BIND_NFC_SERVICE" 在服务声明中要求权限。前者确保服务可以被外部应用程序绑定。后者然后强制只有拥有该 "android.permission.BIND_NFC_SERVICE" 权限的外部应用程序 才能绑定到您的服务。既然 "android.permission.BIND_NFC_SERVICE" 是一个系统权限,这有效地强制只有Android OS可以绑定到你的服务。

这是一个 HostApService 清单声明的例子:

这个元数据标签指向一个 apservice.xml 文件。下面显示了具有包含两个专有AID的单个AID组声明的此类文件的示例:

该 <host-ap-service> 标签需要包含一个 <android:description> 属性,该属性包含可能在UI中显示的用户友好的服务描述。该 requireDeviceUnlock 属性可用于指定在调用此服务来处理APDU之前必须先解锁设备。

在 <host-ap-service> 必须包含一个或多个 <aid-group> 标签。每个 <aid-group> 标签都需要:

最后,您的应用程序还需要拥有 NFC 可以注册为HCE服务的 权限。

多个 HostApService 组件可以安装在单个设备上,并且可以由多个服务注册相同的AID。Android平台根据AID属于哪个类别来解决AID冲突。每个类别可能有不同的冲突解决策略。

例如,对于某些类别(如付款),用户可能能够在Android设置UI中选择默认服务。对于其他类别,策略可能总是要求用户在冲突情况下调用哪个服务。要查询特定类别的冲突解决策略,请参阅 getSelectionModeForCategory() 。

应用程序可以使用[isDefaultServiceForCategory(ComponentName, String)]( https://developer.android.com/reference/android/nfc/cardemulation/CardEmulation.html#isDefaultServiceForCategory(android.content.ComponentName , java.lang.String))API 检查其HCE服务是否是某个类别的默认服务。

如果您的服务不是默认设置,则可以请求将其设置为默认设置。看 ACTION_CHANGE_DEFAULT 。

Android会将AID组为“payment”的类别,声明的HCE服务视为支付应用程序。Android 4.4版本包含一个名为“tap&pay”的top-level设置菜单条目,它列举了所有这些支付应用程序。在此设置菜单中,用户可以选择在点按付款终端时将调用的默认支付应用程序。

为了提供更具视觉吸引力的用户体验,HCE支付应用程序需要为其服务提供额外的resource:所谓的服务标记。

这个asset的大小应该是260x96 dp,并且可以在元数据(meta-data)XML文件中通过添加指向drawable resource android:apServiceBanner 的 <host-ap-service> 标签的属性来指定 。一个例子如下所示:

当设备的屏幕关闭时,当前的Android实施将NFC控制器和应用程序处理器完全关闭。因此,当屏幕关闭时,HCE服务将无法工作。

然而,HCE服务可以从锁定屏幕中起作用:这由HCE服务标记中的 android:requireDeviceUnlock 属性控制 <host-ap-service> 。默认情况下,不需要设备解锁,即使设备被锁定,您的服务也会被调用。

如果您将 android:requireDeviceUnlock HCE服务的属性设置为“true”,Android会提示用户在您靠近NFC读卡器时解锁设备,NFC读卡器会选择已解析为您的服务的AID。解锁后,Android会显示一个对话框,提示用户再次点击以完成交易。这是必要的,因为用户可能已经将设备从NFC读卡器移开以便解锁它。

本部分对于已经部署依赖SE进行卡模拟的应用程序的开发人员很感兴趣。Android的HCE实现旨在与其他实现卡仿真的方法并行工作,包括使用SE。

这种共存基于一种称为“AID路由”的原则:NFC控制器保留一个由(有限)路由规则列表组成的路由表。每个路由规则都包含一个AID和一个目的地。目标可以是主机CPU(Android应用程序正在运行的地方),也可以是连接的SE。

当NFC读卡器发送具有“SELECT AID”的APDU时,NFC控制器解析它并检查AID是否与其路由表中的任何AID匹配。如果匹配,那么APDU和其后的所有APDU将被发送到与AID相关联的目的地,直到收到另一个“SELECT AID” APDU或NFC链路断开。

图4说明了这种架构。

NFC控制器通常还包含APDU的默认路由。在路由表中找不到AID时,将使用默认路由。尽管此设置可能因设备而异,但Android设备需要确保您的应用注册的AID已正确路由到主机。

实现HCE服务或使用SE的Android应用程序不必担心配置路由表 - 这是由Android自动处理的。Android只需要知道哪些AID可以由HCE服务处理,哪些可以由SE处理。基于哪些服务已安装,以及哪些用户已配置为首选服务,路由表会自动配置。

我们已经介绍了如何声明HCE服务的AID。以下部分说明如何为使用SE进行卡模拟的应用程序声明AID。

使用SE进行卡模拟的应用程序可以在其清单中声明所谓的“关闭主机服务”。这种服务的声明几乎与宣布HCE服务相同。以下情况例外:

相应 apservice.xml 文件注册两个AID 的示例:

该 android:requireDeviceUnlock 属性不适用于脱离主机服务,因为主机CPU不参与事务,因此无法阻止SE在设备锁定时执行事务。

该 android:apServiceBanner 属性必须用于作为支付应用程序的关闭主机服务,以便作为默认支付应用程序进行选择。

Android本身永远不会启动或绑定到声明为“脱离主机”的服务。这是因为实际交易由SE执行,而不是由Android服务本身执行。服务声明仅允许应用程序注册安全元件(Secure Element)上存在的AID。

HCE体系结构本身提供了一个核心安全性:因为您的服务受到 BIND_NFC_SERVICE 系统权限的保护,所以只有操作系统可以绑定到您的服务并与之通信。这可以确保您收到的任何APDU实际上都是OS从NFC控制器接收到的APDU,并且您发回的任何APDU只会发送到操作系统,而操作系统会直接将APDU转发给NFC控制器。

剩下的核心部分就是您获取应用程序发送给NFC读卡器的数据的位置。这在HCE设计中有意解耦:它不关心数据来自何处,它只是确保将其安全地传送到NFC控制器并传送到NFC读取器。

为了安全地存储和检索您希望从HCE服务发送的数据,例如,您可以依靠Android应用程序沙箱,将应用程序的数据与其他应用程序隔离。有关Android安全性的更多详细信息,请阅读 安全提示 。

这部分内容对于希望了解HCE设备在NFC协议的防冲突和激活阶段使用何种协议参数的开发人员很感兴趣。这允许构建与Android HCE设备兼容的读卡器基础结构。

作为Nfc-A协议激活的一部分,交换多个帧。

在交换的第一部分,HCE设备将呈现其UID; HCE设备应该被假定为具有随机的UID。这意味着在每个抽头中,呈现给读卡器的UID将是随机生成的UID。因此,NFC读卡器不应依赖HCE设备的UID作为身份验证或身份验证的一种形式。

NFC读取器可以随后通过发送SEL_REQ命令来选择HCE设备。HCE设备的SEL_RES响应将至少设置第6位(0x20),表示设备支持ISO-DEP。注意,SEL_RES中的其他位也可以被设置,表示例如对NFC-DEP(p2p)协议的支持。由于可以设置其他位,所以想要与HCE设备交互的读者应该明确检查第6位,并且<stront style="box-sizing: inherit;">不要将完整的SEL_RES与值0x20进行比较。</stront>

Nfc-A协议激活后,NFC读取器启动ISO-DEP协议激活。它发送一个“RATS”(请求选择应答)命令。RATS响应(ATS)完全由NFC控制器生成,不能由HCE服务配置。然而,HCE实现需要满足NFC论坛对ATS响应的要求,因此NFC读卡器可以根据NFC论坛对任何HCE设备的要求设置这些参数。

以下部分提供了有关NFC控制器在HCE设备上提供的ATS响应的各个字节的更多详细信息:

请注意,许多HCE设备可能符合EMVCo联合的支付网络在其“非接触式通信协议”规范中指定的协议要求。尤其是:

如前所述,HCE实现仅支持单个逻辑通道。尝试在不同的逻辑通道上选择应用程序将不适用于HCE设备。

本文 翻译自 谷歌开发者文档,已由本人仔细校对。如有错误,请联系我,以便修改。

阅读全文

与androidnfc架构相关的资料

热点内容
阿里云99元服务器不可以退款 浏览:337
linux下安装vnc 浏览:656
微信图片加密编辑可见 浏览:704
江恩操盘术pdf 浏览:929
本机构所属的服务器是什么意思 浏览:783
c编译器有哪些段 浏览:862
qq原创表情在哪个文件夹 浏览:624
点点赚app现在怎么不能用了 浏览:363
网红阿里程序员事件 浏览:203
算法设计心得体会 浏览:117
java修改ip 浏览:150
php不需要编译吗 浏览:135
特斯拉新车如何用app控制 浏览:186
文档拖到文件夹就不见了 浏览:815
标致308压缩比是多少 浏览:750
服务器和备用服务器地址 浏览:927
程序员加班跳槽 浏览:708
青年员工在工作中如何化解压力 浏览:604
包子解压神器怎么玩才爽 浏览:735
联想加密电脑怎么做系统 浏览:883