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

Android 2.3.3 近场通信NFC介绍

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

· 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

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

网站地图

Top