NFC(近场通信)
NFC是一套短距离的无线通信,通常距离是4厘米或更短。NFC工作频率是13.56M Hz,传输速率是106kbit/s 到848kbit/s. NFC总是在一个发起者和一个被动目标之间发生。发起者发出近场无线电波,这个近场可以给被动目标供电。这些被动的目标包括不需要电源的标签,卡,也可以是有电源的设备。
与其他无线通信技术比较, 例如蓝牙和WiFi, NFC提供更低带宽和距离,并且低成本,不需要供电,不需要实现匹配,整个通信过程仅仅是短短的靠近一秒就能完成。
一个带有NFC支持的android设备通常是一个发起者。也可以作为NFC的读写设备。他将检测NFC tags并且打开一个Activity来处理. Android 2.3.3还有支持有限的P2P。
Tags分很多种,其中简单的只提供读写段,有的只能读。复杂的tags可以支持一些运算,加密来控制对tags里数据段的读写。甚至一些tags上有简单的操作系统,允许一些复杂的交互和可以执行一些代码。
API概览
Android.nfc package包含顶层类用来与本地NFC适配器交互. 这些类可以表示被检测到的tags和用NDEF数据格式。
Class |
Description |
一个NFC adapter的管理器,可以列出所有此android设备支持的NFC adapter.只不过大部分android 设备只有一个NFC adapter,所以你大部分情况下可以直接用静态方法 getDefaultAdapter(context)来取适配器。 |
|
表示本设备的NFC adapter,可以定义Intent来请求将系统检测到tags的提醒发送到你的Activity.并提供方法去注册前台tag提醒发布和前台NDEF推送。 前台NDEF推送是当前android版本唯一支持的p2p NFC通信方式。 |
|
NDEF是NFC论坛定义的数据结构,用来有效的存数据到NFC tags.比如文本,URL,和其他MIME类型。一个NdefMessage扮演一个容器,这个容器存哪些发送和读到的数据。一个NdefMessage对象包含0或多个NdefRecord,每个NDEF record有一个类型,比如文本,URL,智慧型海报/广告,或其他MIME数据。在NDEFMessage里的第一个NfcRecord的类型用来发送tag到一个android设备上的activity. |
|
标示一个被动的NFC目标,比如tag,card,钥匙挂扣,甚至是一个电话模拟的的NFC卡. 当一个tag被检测到,一个tag对象将被创建并且封装到一个Intent里,然后NFC 发布系统将这个Intent用startActivity发送到注册了接受这种Intent的activity里。你可以用getTechList()方法来得到这个tag支持的技术细节和创建一个android.nfc.tech提供的相应的TagTechnology对象。 |
android.nfc.tech package 包含那些对tag查询属性和进行I/O操作的类。这些类分别标示一个tag支持的不同的NFC技术标准。
Class |
Description |
这个接口是下面所有tag technology类必须实现的。 |
|
支持ISO 14443-3A 标准的操作。Provides access to NFC-A (ISO 14443-3A) properties and I/O operations. |
|
Provides access to NFC-B (ISO 14443-3B) properties and I/O operations. |
|
Provides access to NFC-F (JIS 6319-4) properties and I/O operations. |
|
Provides access to NFC-V (ISO 15693) properties and I/O operations. |
|
Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations. |
|
提供对那些被格式化为NDEF的tag的数据的访问和其他操作。 Provides access to NDEF data and operations on NFC tags that have been formatted as NDEF. |
|
对那些可以被格式化成NDEF格式的tag提供一个格式化的操作 |
|
如果android设备支持MIFARE,提供对MIFARE Classic目标的属性和I/O操作。 |
|
如果android设备支持MIFARE,提供对MIFARE Ultralight目标的属性和I/O操作。 |
声明Android Manifest.xml的元素
在你能访问一个设备的NFC硬件和正确的处理NFC的Intent之前,需要在AndroidManifest.xml中先声明下面的项:
1. NFC使用 <uses-permission> 元素来访问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