Android 2.3.3 近场通信NFC介绍
· 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 。
下面是一个资源文件例子,定义了所有的 technologies. 你可以根据需要删掉不需要的项,将此文件以任意名字 +.xml 保存到 /res/xml 文件夹 .
asis:names:tc:xliff:document:1.2 >
android.nfc.tech.IsoDep
android.nfc.tech.NfcA
android.nfc.tech.NfcB
android.nfc.tech.NfcF
android.nfc.tech.NfcV
android.nfc.tech.Ndef
android.nfc.tech.NdefFormatable
android.nfc.tech.MifareClassic
android.nfc.tech.MifareUltralight
你也可以指定多个 tech-list 集合,每个集合都认做独立的。如果任何单个 tech-list 集合是 getTechList() 返回的technologies 集合的子集,那么你的 Activity 将被认为匹配了。这个还提供 ’ 与 ’ 和 ’ 或 ’ 操作。下面的例子表示支持NfcA 和 NDef 的卡,或者支持 NfcB 和 NDef 的卡:
asis:names:tc:xliff:document:1.2 >
android.nfc.tech.NfcA
android.nfc.tech.Ndef
asis:names:tc:xliff:document:1.2 >
android.nfc.tech.NfcB
android.nfc.tech.Ndef
在 AndroidManifest.xml 文件中 , 指定这个 tech-list 资源文件的方法是在 元素中创建 元素,例如下面例子 :
...
android:resource = @xml/nfc_tech_filter />
...
使用前台发布系统 Using the foreground dispatch system
前台发布系统允许一个 Activity 拦截一个 tag Intent 获得最高优先级的处理,这种方式很容易使用和实现:
1. 添加下列代码到 Activity 的 onCreate() 方法里
a. 创建一个 PendingIntent对象 , 这样 Android 系统就能在一个 tag 被检测到时定位到这个对象
PendingIntent pendingIntent = PendingIntent . getActivity (
this , 0 , new Intent ( this , getClass ()). addFlags ( Intent .FLAG_ACTIVITY_SINGLE_TOP ), 0 );
b. 在 Intent filters 里声明你想要处理的 Intent ,一个 tag 被检测到时先检查前台发布系统,如果前台 Activity 符合Intent filter 的要求,那么前台的 Activity 的将处理此 Intent 。如果不符合,前台发布系统将 Intent 转到 Intent 发布系统。如果指定了 null 的 Intent filters ,当任意 tag 被检测到时,你将收到 TAG_DISCOVERED intent 。因此请注意你应该只处理你想要的 Intent 。
IntentFilter ndef = new IntentFilter ( NfcAdapter . ACTION_NDEF_DISCOVERED);
try {
ndef . addDataType ( */* ); /* Handles all MIME based dispatches.
You should specify only the ones that you need. */
}
catch ( MalformedMimeTypeException e ) {
throw new RuntimeException ( fail , e );
}
intentFiltersArray = new IntentFilter [] {
ndef ,
};
c. 设置一个你程序要处理的 Tag technologies 的列表,调用 Object.class.getName() 方法来获得你想要支持处理的 technology 类。
techListsArray = new String [][] { new String [] { NfcF . class . getName () } };
2. 覆盖下面的方法来打开或关闭前台发布系统。比如 onPause() 和 onResume ()方法。必须在主线程里调用[url=http://developer.android.com/reference/android/nfc/NfcAdapter.html
NFC 介绍 通信 近场 2 3 Android 相关文章:
- NFC技术足以改变生活方式(05-07)
- 走近NFC:你需要知道7件事(02-19)
- NFC技术引领移动支付时代 金属外壳磁场耦合难题解决方案(01-08)
- 采用NFC技术的智能手机设计方案(10-06)
- 博通:加速车联网落地的五项前沿技术(04-14)
- 一篇文章告诉你关于NFC的方方面面(08-07)