微波EDA网,见证研发工程师的成长!
首页 > 射频和无线通信 > 射频无线通信文库 > Android 2.3.3 近场通信NFC介绍

Android 2.3.3 近场通信NFC介绍

时间:04-19 来源:互联网 点击:

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 数据格式。

android.nfc.techpackage 包含那些对 tag 查询属性和进行 I/O 操作的类。这些类分别标示一个 tag 支持的不同的NFC 技术标准。

声明 Android Manifest.xml 的元素

在你能访问一个设备的 NFC 硬件和正确的处理 NFC 的 Intent 之前,需要在 AndroidManifest.xml 中先声明下面的项:

1. NFC 使用 元素来访问 NFC 硬件 :

2. 最小 SDK 版本需要设置正确, API level 9 只包含有限的 tag 支持 , 包括:

. 通过 ACTION_TAG_DISCOVERED来发布 Tag 信息

. 只有通过 EXTRA_NDEF_MESSAGES扩展来访问 NDEF 消息

. 其他的 tag 属性和 I/O 操作都不支持

所以你可能想要用 API level 10 来实现对 tag 的广泛的读写支持。

3. uses-feature 元素定义:你的程序可以再 android 市场里显示有 NFC 硬件。

4. NFC intent filter 告诉 android 系统你的 activity 能处理 NFC 数据,可以定义 1 个或多个 intent filter :

android:resource = @xml/nfc_tech_filter .xml />

上边 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 对应的 元素,这样当扫描到的 tag 传过来的数据类型与你定义的相匹配时,你的 Activity 就会被调用。例如想处理一个包含 plain text 的 NDEF_DISCOVERED intent ,你要按照如下定义AndroidManifest.xml file:

如果 NDEF_DISCOVERED intent 已经被启动, TECH_DISCOVERED 和 TAG_DISCOVERED intents 将不会被启动。假如一个未知的 tag 或者不包含 NDEF 负载的 tag 被检测到,此 Intent 就不会被启动。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top