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,就会发出比较沉闷的声音。
响应流程如下:
如:
<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>
最新文章
- Windows使用总结
- 剑指Offer——网易笔试之解救小易
- 常用webservice接口
- Bridging signals hdu 1950 (最长上升子序列)
- Go语言示例-函数返回多个值
- oracle日期时间函数总结
- android手机游戏开发Cocos2d-x开发分享
- Debian 桌面美化
- VS2010调试小技巧
- Arcgis API for Android之GPS定位
- 如何正确地在手机上显示图片——QImage与QPixmap完全解析
- 【NET】Winform用户控件的初步封装之列表页控件
- html5中的indexDB
- CSS3_元素拖曳原理_设置全局点击捕获_九宫格碰撞检测_自定义滚动条
- Javascript高级编程学习笔记(29)—— BOM(3)location对象
- vue组件+axios访问本地json
- android------基础面试题
- wordpress4.4+版本自动生成一个768w像素缩略图的解决办法
- MySQL优化小案例:连接数
- Android开发精彩博文收藏——UI界面类
热门文章
- 无法解析的外部符号 _WinMain@16 fatal error LNK1120: 1 个无法解析的外部命令
- 转:一份基础的嵌入式Linux工程师笔试题
- 应用层HTTP,FTP,TFTP,TELNET,DNS,EMAIL
- JqueryMoblie 之 loading
- Cocos2dx中的四种控件及主要用法
- Hello BaiduMap
- Payment Terms 收付款条件和分期付款设置
- extern ";C";——用“C”来规约在C++中用C的方式进行编译和链接
- fork 函数 和vfork 函数的区别
- specular map normal map gloss map