NFC(4)响应NFC设备时启动activity的四重过滤机制

响应NFC设备时启动activity的四重过滤机制

  在一个NFC设备读取NFC标签或另一个NFC设备中的数据之前会在0.1秒之内建立NFC连接,然后数据会自动从被读取一端流向读取数据的一端(NFC设备一般需要触摸一下屏幕才开始传输)。数据接收端会根据具体的数据格式和标签类型调用相应的Activity(这种行为也称为Tag Dispatch)。这些Activity都需要定义Intent Filter。这些Intent Filter中就会指定不同的过滤机制,分为3个级别。因此,也称为NFC的四重过滤机制。

NDEF_DISCOVERED 只过滤固定格式的NDEF数据。例如,纯文本、指定协议(http、ftp、smb等)的URI等。
TECH_DISCOVERED

当ACTION_NDEF_DISCOVERED指定的过滤机制无法匹配Tag时,就会使用这种过滤机制进行匹配。

这种过滤机制并不是通过Tag中的数据格式进行匹配的,而是根据Tag支持的数据存储格式进行匹配。因此这种过滤机制的范围更广。

TAG_DISCOVERED

如果将NFC的过滤机制看成是if… elseif…else语句的话,那么这种过滤机制就相当于else语句。前面两种过滤机制都失败后,

系统就会利用这种过滤机制来处理。这种过滤机制用来处理未识别的Tag(数据格式不对,而且Tag支持的格式也不匹配)。

用代码 NfcAdapter

注意它的activity要

android:launchMode="singleTop"

NfcAdapter.enableForegroundDispatch(Activity activity, android.app.PendingIntent intent, android.content.IntentFilter[] filters, String[][] techLists) 

NfcAdapter.disableForegroundDispatch(Activity activity)

  Android系统会依次匹配NDEF_DISCOVERED、TECH_DISCOVERED和TAG_DISCOVERED。如果通过四重过滤机制仍然无法匹配Tag,则什么都不做。通常在成功匹配Tag后,Android设备会发出比较清脆的声音,而未成功匹配Tag,就会发出比较沉闷的声音。

  响应流程如下:

如:

 1 <activity
 2      android:name=".TagTextActivity"
 3      android:label="显示纯文本NFC标签的内容"
 4      android:launchMode="singleTask" >
 5     <intent-filter>
 6          <!--  指定了NDEF_DISCOVERED  -->
 7          <action android:name="android.nfc.action.NDEF_DISCOVERED" />
 8          <category android:name="android.intent.category.DEFAULT" />
 9          <!--  指定了纯文本格式  -->
10          <data android:mimeType="text/plain" />
11      </intent-filter>
12  </activity>

 

posted @ 2015-09-04 11:13  f9q  阅读(1777)  评论(0编辑  收藏  举报