NDEF信息

1、NDEF

NDEF消息由一个或多个NEDF Record组成
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/8bc118a6eb8244c9870df4c98d61e7aa.png
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
RTD简介

     名词简介:

     RTD: record typedefinition

     NID:namespace indentifier

     NSS:namespace specific string    

     URI:uniform resourceindentifier

     URN:uniform resource name

     MIME: multipurpose internet mailextension

Record type简介:

    NFC中well known type设置为TNF为0x01,则其NID为”nfc”,NSS前缀含“wkt”,例如:“urn:nfc:wkt:a”被编码成”a”。 

    若设置TNF为0x04,表示external type时,说明第三方希望能自行分配namespace,则其NID为”nfc”,NSS前缀含“ext”,例如:“urn:nfc:ext:<domain>:<servicename>”被编码成” <domain>:<service name>”。

    协议规定全局变量需以大写字母开头,局部变量使用小写字母或者数据开头。

编码简介

     编码结果中,不应该出现URN NID以及NSS prefix。

    在比较type名称时,两个well know type的名字区分大小写,但是两个external type的名字不区分大小写。例子请参考Spec。

     对于编码,协议还有规定一些error handling部分,简单的说就是忽略错误信息:

    -  出现非法字符(Spec定义以外的字符)时,直接忽略

    -  忽略无法识别的wkt和ext时,直接忽略

由于NDEF 和RTD部分的协议比较简单,就不过多介绍。其实针对RTD的部分,每种格式都有规定其具体的封包信息(例如text格式,sig格式以及smart post等),这里就不多具体说明,需要使用要对应协议的,请直接参考就好。

补充一下个人对于LLCP SNEP NEDF以及RTD的理解示意图:

±------------------------------------------+
| ±-------------------------------+ |
| | ±-------------------+ | |
| | | ±------+ | | |
| LLCP | SNEP | DNEF | RTD | | | |
| | | ±------+ | | |
| | ±-------------------+ | |
| ±-------------------------------+ |
±------------------------------------------+

2、三种数据模式的优先级

<intent-filter>

        <action android:name = "android.nfc.action.NDEF_DISCOVERED" />

<data android:mimeType = "text/plain" />

    </intent-filter>
    <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" /> 
  <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的模式,根据来关联对应的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类型等。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44440669/article/details/119453236