响应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,就会发出比较沉闷的声音。

  响应流程如下:

如:

 <activity
android:name=".TagTextActivity"
android:label="显示纯文本NFC标签的内容"
android:launchMode="singleTask" >
<intent-filter>
<!-- 指定了NDEF_DISCOVERED -->
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<!-- 指定了纯文本格式 -->
<data android:mimeType="text/plain" />
</intent-filter>
</activity>

最新文章

  1. Windows使用总结
  2. 剑指Offer——网易笔试之解救小易
  3. 常用webservice接口
  4. Bridging signals hdu 1950 (最长上升子序列)
  5. Go语言示例-函数返回多个值
  6. oracle日期时间函数总结
  7. android手机游戏开发Cocos2d-x开发分享
  8. Debian 桌面美化
  9. VS2010调试小技巧
  10. Arcgis API for Android之GPS定位
  11. 如何正确地在手机上显示图片——QImage与QPixmap完全解析
  12. 【NET】Winform用户控件的初步封装之列表页控件
  13. html5中的indexDB
  14. CSS3_元素拖曳原理_设置全局点击捕获_九宫格碰撞检测_自定义滚动条
  15. Javascript高级编程学习笔记(29)—— BOM(3)location对象
  16. vue组件+axios访问本地json
  17. android------基础面试题
  18. wordpress4.4+版本自动生成一个768w像素缩略图的解决办法
  19. MySQL优化小案例:连接数
  20. Android开发精彩博文收藏——UI界面类

热门文章

  1. 无法解析的外部符号 _WinMain@16 fatal error LNK1120: 1 个无法解析的外部命令
  2. 转:一份基础的嵌入式Linux工程师笔试题
  3. 应用层HTTP,FTP,TFTP,TELNET,DNS,EMAIL
  4. JqueryMoblie 之 loading
  5. Cocos2dx中的四种控件及主要用法
  6. Hello BaiduMap
  7. Payment Terms 收付款条件和分期付款设置
  8. extern &quot;C&quot;——用“C”来规约在C++中用C的方式进行编译和链接
  9. fork 函数 和vfork 函数的区别
  10. specular map normal map gloss map