android之NFC 技术介绍

NFC

NFCNear Field Communication缩写,即近距离无线通讯技术。由飞利浦和索尼公司共同开发的NFC是一种非接触式识别和互联技术,可以在移动设备、消费类电子产品、PC和智能控件工具间进行近距离无线通信。NFC提供了一种简单、触控式的解决方案,可以让消费者简单直观地交换信息、访问内容与服务。目前,NFC论坛在全球拥有 70多个成员,包括:万事达卡国际组织、松下电子工业有限公司、微软公司、摩托罗拉公司、NEC公司、瑞萨科技公司、三星公司、德州仪器制造公司和 Visa国际组织。NFC是在RFID的基础上发展而来,NFC从本质上与RFID没有太大区别,都是基于地理位置相近的两个物体之间的信号传输。

Android从2.3版本的SDK开始支持基于NFC通信。


射频识别即RFID(Radio Frequency IDentification)

又称电子标签、无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。常用的有低频(125k~134.2K)、高频(13.56Mhz)、超高频,无源等技术。RFID读写器也分移动式的和固定式的,目前RFID技术应用很广,如:图书馆,门禁系统,食品安全溯源等。

RFID 许多人对于 RFID 的感性认识都来自一则 IBM 的广告:一个在超市购物的青年一边逛一边往风衣里塞商品,到收银台后直接领取账单,而不需要掏钱付款。这则广告非常形象地给人们展示了 RFID 技术在日常生活中的应用。

RFID的三大问题:

1.价格:与传统二维码相比,在未能大规模应用时,没有价格优势,但其有可重复使用、减少人力、减少错误、提高客户满意度能隐性优势;

2.安全:一家名为IOActive的公司展示了一款RFID克隆器,这款设备可以通过复制信用卡来窃取密码;业内某安全专家破解了一张英国发行的、利用RFID来存储个人信息的新型生物科技护照。这些让人们对于RFID的安全性产生了质疑。但RFID大多应用在一些普通信息存储方面,而且RFID标签非常小,上面不能存储太多的数据。而标签上的信息并不总是敏感信息。花费太多的时间和费用去保证货物RFID标签信息的安全性,对于货主来说毫无意义。

3.标准:我国坚持推出自主知识产权的RFID标准,另一方面,国内RFID产业的迅速发展却迟迟没有可以依照的中国标准,RFID的标准问题的处境显得十分尴尬;下载地址:

IC卡 (Integrated Circuit Card,集成电路卡)

有些国家和地区也称智能卡(smart card)、智慧卡(intelligent card)、微电路卡(microcircuit card)或微芯片卡等。它是将一个微电子芯片嵌入符合ISO 7816标准的卡基中,做成卡片形式。所以非接触式IC卡又被称为射频卡或者电子标签IC卡是指集成电路卡,一般用的公交车卡就是IC卡的一种,也应用在门禁管理、身份证明和电子钱包IC卡有别于磁卡,所以说IC卡消磁纯属伪科学!简单来说,其工作原理就是读卡器发射一个根据信息变化的电磁波。卡片内部的感应线圈把这个电磁波转换成感应电流,用以传递信息和驱动芯片工作。


以上介绍我们可以知道IC卡是一种存储数据的卡,而RFID是一种通讯技术,IC卡属于RFID的一种物理形式。NFC是由RFID演变出来的,向下兼容RFID,自然也兼容IC卡


RFIDNFC的区别:

NFCRFID还是有区别的,NFC技术增加了点对点通信功能,可以快速建立蓝牙设备之间的P2P(点对点)无线通信,NFC设备彼此寻找对方并建立通信连接。P2P通信的双方设备是对等的,而RFID通信的双方设备是主从关系。

其余还有一些技术细节方面:

NFC相较于RFID技术,具有距离近、带宽高、能耗低等一些特点。详细内容:

1.NFC只是限于13.56MHz的频段!而RFID的频段有低频(125KHz135KHz),高频(13.56MHz)和超高频(860MHz960MHz之间。

2.工作有效距离:NFC(小于10cm,所以具有很高的安全性),RFID距离从几米到几十米都有!持NFC,而RFID标准较多,统一较为复杂,只能在特殊行业有特殊需求下,采用相应的技术标准!

3.因为同样工作于13.56MHzNFC与现有非接触智能卡技术兼容,所以很多的厂商和相关团体都支领域内发挥着巨大的作用。

4.应用:RFID更多的被应用在生产、物流、跟踪、资产管理上,而NFC则在门禁、公交、手机支付等


转自:http://www.cnblogs.com/zouhao/archive/2013/04/17/3025542.html

 

RFID分为Reserved(保留)Tag memory(标签内存),EPC(电子产品代码),TID(标签识别号)和User(用户)四个独立的存储区块(Bank)

Reserved区:存储Kill Password(灭活口令)和Access Password(访问口令)。
EPC区:存储EPC号码等。
TID区:存储标签识别号码,每个TID号码应该是唯一的。
User区:存储用户定义的数据。
此外还有各区块的Lock(锁定)状态位等用到的也是存储性质的单元。

 

基于NFC的识别和通信可分为三个步骤:

1、Android通过设备上NFC的相关硬件和驱动,发现周边的NFC设备或标志,并读取出其中包含的消息和数据;
2、Android会发出请求事件,调用适合的界面组件来处理NFC消息。
3、在寻找到合适的界面组件后,Android会构造并调用该界面组件,但它与NFC标志进行通信。

声明 Android Manifest.xml 的元素:
在你能访问一个设备的 NFC 硬件和正确的处理 NFC 的 Intent 之前,需要在 AndroidManifest.xml 中先声明下面的项
1、允许元素来访问 NFC 硬件:
<uses-permission android:name = "android.permission.NFC" />
2、最小 SDK 版本需要设置正确,API level 9 只包含有限的 tag 支持 , 包括:
. 通过 ACTION_TAG_DISCOVERED来发布 Tag 信息
. 只有通过 EXTRA_NDEF_MESSAGES扩展来访问 NDEF 消息
. 其他的 tag 属性和 I/O 操作都不支持
所以你可能想要用 API level 10 来实现对 tag 的广泛的读写支持。
<uses-sdk android:minSdkVersion = "10" />
3、 uses-feature 元素定义:你的程序可以再 android 市场里显示有 NFC 硬件。
<uses-feature android:name = "android.hardware.nfc" android:required = "true" />
4、NFC intent-filter 告诉 android 系统你的 activity 能处理 NFC 数据,可以定义 1 个或多个 intent filter :
<intent-filter>
  <action android:name = "android.nfc.action.NDEF_DISCOVERED" />
  <data android:mimeType = "mime/type " />
</intent-filter>
<intent-filter>
  <action android:name = "android.nfc.action.TECH_DISCOVERED" />
  <meta-data android:name = "android.nfc.action.TECH_DISCOVERED"
                android:resource = "@xml/nfc_tech_filter .xml" />
</intent-filter>
<intent-filter>
  <action android:name = "android.nfc.action.TAG_DISCOVERED" />
</intent-filter>
上边 3 个 intent filters 有优先级,NDEF_DISCOVERED的优先级最高,TAG_DISCOVERED的优先级最低。

Tag 发布系统:
当 android 设备扫描到一个 NFC tag ,通用的行为是自动找最合适的 Activity 会处理这个 tag Intent 而不需要用户来选择哪个Activity 来处理。因为设备扫描 NFC tags 是在很短的范围和时间,如果让用户选择的话,那就有可能需要移动设备,这样将会打断这个扫描过程。你应该开发你只处理需要处理的 tags 的 Activity ,以防止让用户选择使用哪个 Activity 来处理的情况。Android 提供两个系统来帮助你正确的识别一个 NFC tag 是否是你的 Activity 想要处理的: Intent 发布系统和前台 Activity 发布系统。
Intent 发布系统检查所有 Activities 的 intent filters ,找出那些定义了可以处理此 tag 的 Activity ,如果有多个 Activity 都配置了处理同一个 tag Intent ,那么将使用 Activity 选择器来让用户选择使用哪个 Activity 。用户选择之后,将使用选择的 Activity 来处理此Intent 。
前台发布系统允许一个 Activity 覆盖掉 Intent 发布系统而首先处理此 tag Intent ,这要求你将要处理 Tag Intent 的 Activity 运行在前台,这样当一个 NFC tag 被扫描到,系统先检测前台的 Activity 是否支持处理此 Intent ,如果支持,即将此 Intent 传给此 Activity,如果不支持,则转到 Intent 发布系统。

NFC数据交换格式:
NdefMessage 是交换NFC数据最常用的方式,当然,你仍然可以定义你自己的non-NDEF 数据。
NfcAdapter 用来监测设备对NFC的支持。前台调度系统允许一个活动拦截一个意图并允许这个活动比其他处理相同意图的活动拥有更高的优先级。

因此,在实际开发中,开发者需要尽可能精确地配置Intent-Filter,避免捕获无法处理的NFC事件而影响用户体验;或者采取热拔插Intent-Filter的策略,将用户选择处理组件的流程放在识别之前,从而实现精准选择NFC处理组件。相关示例如下:
// 构造待触发的Intent
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,new Intent(this,getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),0);
//构造Intent-Filter 来处理NFC消息
IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
ndef.addDataType("text/plain");
intentFilterArray = new IntentFilter[]{ndef};
techListsArray = new String[][]{ new String[] { NfcF.class.getNane()}};
......

// 当界面组件位于前台时,监听相关NFC事件
@Override
public void onResume() {
    super.onResume();  
    //NfcAdapter.getDefaultAdapter(this).enableForegroundDispatch(this,pendingIntent,intentFiltersArray,techListsArray);
    NfcAdapter.getDefaultAdapter(this).enableForegroundDispatch(this, mNdefMessage);
}
// 当界面组件位于后台状态时,停止监听
@Override
public void onPause() {
    super.onPause();
    NfcAdapter.getDefaultAdapter(this).disableForegroundDispatch(this);
}

最后,在寻找到合适的界面组件后,Android会构造并调用该界面组件,但它与NFC标志进行通信。组件与NFC标志交换的数据是通过android.nfc.NdefMessage对象来封装的。每一个NdefMessage中,包含了1个或多个android.nfc.NdefRecord对象。NdefRecord是表示NDEF格式数据的基本单元,它包含类型信息、唯一的标志信息以及需要传输的数据。界面组件可以从NFC标志中读取或写入NdefMessage对象。

转自:http://www.cnblogs.com/klcf0220/p/3246158.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值