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
|
NfcManager
|
一个 NFC adapter 的管理器,可以列出所有此 android 设备支持的 NFC adapter. 只不过大部分android 设备只有一个 NFC adapter ,所以你大部分情况下可以直接用静态方法getDefaultAdapter(context) 来取适配器。
|
NfcAdapter
|
表示本设备的 NFC adapter, 可以定义 Intent 来请求将系统检测到 tags 的提醒发送到你的 Activity. 并提供方法去注册前台 tag 提醒发布和前台 NDEF 推送。 前台 NDEF 推送是当前 android 版本唯一支持的 p2p NFC 通信方式。
|
NdefMessageandNdefRecord
|
NDEF 是 NFC 论坛定义的数据结构,用来有效的存数据到 NFC tags. 比如文本, URL ,和其他MIME 类型。一个 NdefMessage 扮演一个容器,这个容器存哪些发送和读到的数据。一个NdefMessage 对象包含 0 或多个 NdefRecord, 每个 NDEF record 有一个类型,比如文本, URL ,智慧型海报 / 广告,或其他 MIME 数据。在 NDEFMessage 里的第一个 NfcRecord 的类型用来发送 tag到一个 android 设备上的 activity.
|
Tag
|
标示一个被动的 NFC 目标,比如 tag , card ,钥匙挂扣,甚至是一个电话模拟的的 NFC 卡 .当一个 tag 被检测到,一个 tag 对象将被创建并且封装到一个 Intent 里,然后 NFC 发布系统将这个Intent 用 startActivity 发送到注册了接受这种 Intent 的 activity 里。你可以用 getTechList() 方法来得到这个 tag 支持的技术细节和创建一个 android.nfc.tech 提供的相应的 TagTechnology 对象。
|
android.nfc.techpackage 包含那些对 tag 查询属性和进行 I/O 操作的类。这些类分别标示一个 tag 支持的不同的 NFC 技术标准。
Class
|
Description
|
TagTechnology
|
这个接口是下面所有 tag technology 类必须实现的。
|
NfcA
|
支持 ISO 14443-3A 标准的操作。 Provides access to NFC-A (ISO 14443-3A) properties and I/O operations.
|
NfcB
|
Provides access to NFC-B (ISO 14443-3B) properties and I/O operations.
|
NfcF
|
Provides access to NFC-F (JIS 6319-4) properties and I/O operations.
|
NfcV
|
Provides access to NFC-V (ISO 15693) properties and I/O operations.
|
IsoDep
|
Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations.
|
Ndef
|
提供对那些被格式化为 NDEF 的 tag 的数据的访问和其他操作。Provides access to NDEF data and operations on NFC tags that have been formatted as NDEF.
|
NdefFormatable
|
对那些可以被格式化成 NDEF 格式的 tag 提供一个格式化的操作
|
MifareClassic
|
如果 android 设备支持 MIFARE ,提供对 MIFARE Classic 目标的属性和 I/O 操作。
|
MifareUltralight
|
如果 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 操作都不支持 所以你可能想要用 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 有优先级,更多信息可以看下面的 Tag 发布系统
也可以看 NFCDemo 例子的 AndroidManifest.xml来有个更深的理解。
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 发布系统。
使用 Intent 发布系统
Intent 发布系统指定了 3 个 intent 有不同的优先级。通常当一个 tag 被检测到之后, Intent 就被启动( start )了,这个启动遵循以下行为 :
· android.nfc.action.NDEF_DISCOVERED : 这个 intent 是在一个包含 NDEF 负载的 tag 被检测到时启动,这是最高优先级的 intent, android 系统不会让你指定一个 Intent 能处理所有的 NFC 数据类型,你必须在 AndroidManifest.xml 中指定与NFC tag 对应的 <data> 元素,这样当扫描到的 tag 传过来的数据类型与你定义的相匹配时,你的 Activity 就会被调用。例如想处理一个包含 plain text 的 NDEF_DISCOVERED intent ,你要按照如下定义 AndroidManifest.xml file:
- <intent-filter>
- <action android:name = "android.nfc.action.NDEF_DISCOVERED" />
- <data android:mimeType = "text/plain" />
- </intent-filter>
复制代码
如果 NDEF_DISCOVERED intent 已经被启动, TECH_DISCOVERED 和 TAG_DISCOVERED intents 将不会被启动。假如一个未知的 tag 或者不包含 NDEF 负载的 tag 被检测到,此 Intent 就不会被启动。
· android.nfc.action.TECH_DISCOVERED : 如果 NDEF_DISCOVERED intent 没启动或者没有一个 Activity 的 filter 检测 NDEF_DISCOVERED ,并且此 tag 是已知的,那么此 TECH_DISCOVERED Intent 将会启动 . TECH_DISCOVERED intent 要求你在一个资源文件里 (xml) 里指定你要支持 technologies 列表。更多细节请看下面的 Specifying tag technologies to handle .
· android.nfc.action.TAG_DISCOVERED : 如果没有一个 activity 处理 _DISCOVERED and TECH_DISCOVEREDintents 或者 tag 被检测为未知的,那么此 Intent 将会被启动。
Specifying tag technologies to handle 指定处理的 technologies
假如你的 Activity 在 AndroidManifest.xml 文件里声明了处理 android.nfc.action.TECH_DISCOVERED intent ,你必须创建一个 Xml 格式的资源文件,并加上你的 activity 支持的 technologies 到 tech-list 集合里。这样你的 activity 将被认作能处理这些 tech-list 的处理者,如果 tag 使用的 technology 属于你的定义的 list 里,你的 Activity 将接收此 Intent 。你可以用getTechList() 来获得 tag 支持的 technologies 。
例如:如果一个 tag 被检测到支持 MifareClassic, NdefFormatable, 和 NfcA ,你的 tech-list 集合必须指定了其中的一项或者多项来保证你的 Activity 能处理此 Intent 。
|
相关推荐
Android 2.3.3版本引入或加强了对NFC的支持,允许设备在只有几厘米的范围内与别的NFC设备或标签进行交互。NFC工作频率为13.56MHz,并且支持的传输速率介于106kbit/s到848kbit/s之间。它使用电磁感应原理来传递数据,...
1. NFC(近场通信):Android 2.3.3开始支持NFC技术,允许设备之间进行数据交换和支付等应用开发。 2. Account Manager:改进了账户管理API,方便开发者处理用户登录和同步数据的问题。 3. WebKit浏览器引擎:升级了...
1. **标签阅读API扩展**:Android 2.3.3版本支持更多的全球标签标准,这意味着应用程序可以更好地与现有的门禁系统、公共交通系统以及供应链管理系统等进行交互。此外,这也有助于提高不同品牌标签之间的兼容性,...
在Android平台上,NFC功能自Android 2.3.3(API级别10)开始得到支持。为了启用NFC功能,开发者需要进行以下步骤: 1. **修改`AndroidManifest.xml`文件**:确保应用程序的目标SDK版本不低于Android 2.3.3,并添加...
Android 2.3.3 及其后续版本都支持 NFC 技术。 Android.nfc 包含了多个类,用于与本地 NFC 适配器交互。这些类可以表示被检测到的 tags 和用 NDEF 数据格式。其中,NfcManager 是一个 NFC 适配器的管理器,可以列出...
3. Android系统从API Level 10(Android 2.3.3)开始支持NFC功能。 二、Android NFC开发环境 1. 确保开发设备支持NFC功能,并开启NFC功能。 2. 使用Android Studio作为开发工具,选择对应的SDK版本。 3. 在...
Android系统提供的API以及对NFC技术的不断更新和改进,使得在Android平台上开发NFC应用变得更加容易。开发者可以利用Android提供的NFC框架和API,编写应用程序,实现各种功能,如在设备之间交换数据、访问无线服务、...
- **API Level 10 (Android 2.3.3)**: 在这一版本中首次引入了P2P模式的支持,并提供了`enableForegroundNdefPush`方法用于实现简单的NFC数据推送功能。 - **API Level 14 (Android 4.0)**: 随着Android 4.0的发布,...
描述中的内容涵盖了多个不同的技术领域,包括Silicon Labs的Si51X系列晶体振荡器,恩智浦半导体(NXP)对Android 2.3.3版本NFC API的扩展,CEVA公司的Dolby HD Audio编解码器套件,以及Vishay的TMBS整流器产品线扩充...
NFC工具包Android应用程序将命令发送到Secure Element。 此应用程序能够将命令发送到... 这些API /库是: 开启行动API 适用于Android 2.3.3的设备保真度API Android Tag Tech API 适用于Android 1.0.1.1的Copni SDK
#### 10 – Android 2.3.3 此版本未在官方文档中有明确的新特性记录,通常被认为是2.3系列的一个小版本更新,主要用于修复已知问题和提升系统稳定性。 #### 11 – Android 3.0 (Honeycomb) - **发布时间**:2011...
HotKnot是一种由联发科开发的近场通信(NFC)技术,用于设备间的无线数据传输。它允许用户通过触碰两个设备的屏幕来交换数据,如联系人、图片和文件,类似于苹果的AirDrop功能。 2.2 **多SIM卡** 联发科SDK支持多...