NFC三种模式NDEF,TECH,TAG 解析顺序

假设在nexus s手机上装了3种NFC相应程序(每种应用程序的启动页就是一个activity),分别对应三种过滤器,那么当一个tag靠近时,nexus s究竟选择哪种应用程序来处理呢?按照以下的规则,该规则成为intent发布系统规则:

activity A中对intent过滤器设置了android.nfc.action.NDEF_DISCOVERED的判断规则;

<intent-filter>
    <action android:name = "android.nfc.action.NDEF_DISCOVERED" />
    <data android:mimeType = "text/plain" />
</intent-filter>

activity B中对intent过滤器设置了android.nfc.action.TECH_DISCOVERED的判断规则;

 <intent-filter>             
        <action android:name="android.nfc.action.TECH_DISCOVERED" />
    intent-filter> 
   <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
          android:resource="@xml/filter_nfc" />

activity C中对intent过滤器设置了android.nfc.action.TAG_DISCOVERED的判断规则;

<intent-filter>
       <action android:name="android.nfc.action.TAG_DISCOVERED"/>
       <category android:name="android.intent.category.DEFAULT"/>
intent-filter>

1、按照优先级(android.nfc.action.NDEF_DISCOVERED优先级最高),会先去判断请求是否满足activity A(因为A用的是NDEF_DISCOVERED)中的intent过滤器规则,先判断请求是否是NDEF_DISCOVERED格式的数据(action name),另外再判断NDEF_DISCOVERED数据的类型(action type),是纯文本还是智能海报,只有与过滤器中两个条件都要求的一致,才会选择activity A来处理。

2、当activity A不满足,则判断activity B来判断,也就是NDEF_DISCOVERED处理不了的则开始找TECH_DISCOVERED。Activity B的intent过滤器中选择了根据TECH_DISCOVERED来过滤,也就是请求tag的NFC规范必须满足TECH_DISCOVERED设置的ISO14443-4、ISO14443-3A,或者ISO14443-3B种的一种或几种。TECH_DISCOVERED过滤必须要定义一个xml文件来筛选所要支持的tech的模式,根据

<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
          android:resource="@xml/filter_nfc" />  

来关联对应的tech过滤器filter_nfc文件。在filter_nfc.xml中,只有符合了….标签之间定义的NFC标准,该activity才会相应,否则则都被activity设置的intent过滤器给pass掉。

3、当请求intent对于NDEF_DISCOVERED和TECH_DISCOVERED规则都不满足的时候,则intent才开始找intent过滤规则为android.nfc.action.TAG_DISCOVERED的activity,也就是activity C。TAG_DISCOVERED的过滤规则是最不严格的,只要符合NFC规范中的任一种则都会响应,所以在android中,它的优先级是最低的,否则一开始就选择TAG_DISCOVERED来相应,activity无法获得tag更详细的一些信息,比如tag满足的NFC规范或者NDEF类型等。

———————————————————————
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
有需求者请进站查看,非诚勿扰

https://item.taobao.com/item.htm?spm=686.1000925.0.0.4a155084hc8wek&id=555888526201

01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)
——————————————————————–

你可能感兴趣的:(android,多媒体)