首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android 2.3.3 NFC API通译(转载)

2012-07-01 
Android 2.3.3 NFC API翻译(转载)复制代码2.最小 SDK 版本需要设置正确, API level 9 只包含有限的 tag 支

Android 2.3.3 NFC API翻译(转载)
复制代码

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 :

??<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:

? ? <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 。


原文地址:http://www.apkbus.com/forum.php?mod=viewthread&tid=2005

热点排行