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 @   f9q  阅读(1816)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示