加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

nfc 标签调度和ndef数据处理

发布时间:2020-12-14 02:39:33 所属栏目:大数据 来源:网络整理
导读:?? ??? ???????????? ??? 参考: http://developer.android.com/guide/topics/connectivity/nfc/nfc.html NDEF NFC数据交换格式 ? 可以参考nfc论坛提供的详细说明 MIME 多用途的网际邮件扩充协议.设定某种扩展名的文件用一种应用程序来打 开的方式类型,当该
??

???

???????????????

参考:
http://developer.android.com/guide/topics/connectivity/nfc/nfc.html
NDEF NFC数据交换格式 ? 可以参考nfc论坛提供的详细说明


MIME 多用途的网际邮件扩充协议.设定某种扩展名的文件用一种应用程序来打
开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程
序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。




android api框架提供了nfc数据ndef的接受和发送,在支持nfc功能的android
设备上,主要有两个用途:从nfc标签读取ndef数据;两个android设备之间传
输数据。?
读取NDEF数据:一个NFC标签处理与标签的调度系统,分析发现的NFC标签,适当
地对数据进行分类,并启动一个应用程序。在分类的数据中,要处理扫描NFC标签
的应用程序可以声明一个 intent filter来处理数据请求。


Android Beam功能允许通过物理设备传输NDEF消息到其它设备上,这种互动提供
了一个比其它无线技术更简单的方法,如蓝牙发送数据,因为与NFC不需要发现
或配对,连接两个设备时自动启动。Android的传输是通过一系列的NFC API,
所以任何应用都可以在设备之间传输信息。例如,联系人,浏览器和YouTube应
用程序共享联系人,网页,视频与其他设备使用Android的Beam。




1.标签调度系统


Android设备的NFC即使在屏幕锁定的状态下也可以处理标签的请求,除非在NFC设备的
设置菜单中禁用。当Android设备发现了一个NFC标签,根据标签调度系统来选择最合
适的应用来处理,而不是让用户来选择什么样的应用来处理,因为设备扫描NFC标签时,
在很短的范围内,很可能使用户手动选择活动将迫使他们远离标签和移动设备断开连接。
每个应用程序应该选择最合适的标签过滤器来过滤nfc请求,尽量避免出现选择框让用户
选择应用程序来处理nfc请求。?


为了帮助你实现这个目标,Android提供了一个特殊的标签调度系统扫描NFC标签并进行
分析、解析,并试图找出适合的应用程序来处理。它通过:?


1.解析NFC标签并计算出的MIME类型或一个URI,用于标识在标签的数据有效载荷。
2.封装的MIME类型或URI和有效载荷的意图。前两个步骤中描述NFC标签如何被映射到MIME
类型和URI。
3.启动活动的意图。这时在应用中处理nfc请求。


硬件收到nfc请求,解析出标签的类型---》封装标签类型到intent---》根据过滤器,
选择合适的应用程序处理






NFC标签如何被映射到MIME类型和URI


在你开始写你的NFC应用,重要的是要了解不同类型的NFC标签,标签调度系统如何解析NFC标签,
标签调度系统的特殊工作,当它检测NDEF消息。NFC标签来在各种各样的技术,还可以有许多不
同的方式对他们的数据写入。Android有支持NDEF标准,这是由NFC论坛制定。


NDEF数据封装内部消息(NdefMessage),它包含一个或多个记录(NdefRecord)。每个NDEF记录
必须很好地形成根据类型的记录,你要创建的规范。Android也支持其它类型的标签不包含NDEF数据,
你可以使用类在android.nfc.tech包。要了解有关这些技术的更多信息,请参见nfc高级部分。
这些其他类型的标签的工作涉及编写自己的协议栈与标签进行通信,为了便于开发和提供Android的
设备的最大支持,所以我们建议使用NDEF格式。?


注意: 要下载完整的的NDEF规格,NFC论坛规范下载网站,请参阅创建NDEF记录如何构建NDEF记录
的例子常见的类型。


现在你有一些NFC标签的基础,在下面的章节描述了更详细的描述了Android如何处理格式化的NDEF标签。
当Android设备扫描NFC标签含有NDEF格式的数据,解析消息,并试图找出数据的MIME类型或识别
的URI。要做到这一点,系统会读取里面的NdefMessage第一NdefRecord确定如何解析整个NDEF消息
(NDEF消息可以有多个NDEF记录)。在一个NdefRecord必需包含以下字段:


3-bit TNF (Type Name Format)
Indicates how to interpret the variable length type field. Valid values are described?
in described in Table 1.
(主要根据这个byte解析NdefRecord的类型)


Variable length type
Describes the type of the record. If using TNF_WELL_KNOWN,use this field to specify?
the Record Type Definition (RTD). Valid RTD values are described in Table 2.
(描述NdefRecord类型)


Variable length ID
A unique identifier for the record. This field is not used often,but if you need to?
uniquely identify a tag,you can create an ID for it.
(NdefRecord唯一标示符)
Variable length payload
The actual data payload that you want to read or write. An NDEF message can contain?
multiple NDEF records,so don't assume the full payload is in the first NDEF record?
of the NDEF message.
(有效的数据)?


标签调度系统使用TNF和类型字段尝试映射NDEF消息的MIME类型,或URI。如果成功,它封装了该信息,
里面包含一个ACTION_NDEF_DISCOVERED的意图与实际载荷。但是,也有情况下,标签调度系统在第一
个NDEF记录不能确定类型。这种情况发生时,NDEF数据不能被映射为MIME类型或URI,或NFC标签不包
含NDEF数据。在这种情况下,标签对象,该对象具有标记的技术的信息和有效载荷封装的
ACTION_TECH_DISCOVERED意图,而不是内部包含的意图。


表1描述了如何标记调度系统地图TNF和类型字段设置为MIME类型或URIs。还介绍TNFs不能映射到一个
MIME类型或URI。在这些情况下,标签调度系统启动ACTION_TECH_DISCOVERED。?
例如,如果标签调度系统遇到一个记录类型TNF_ABSOLUTE_URI,该记录的可变长度类型字段映射到一个URI。
标签调度系统在数据字段中的的ACTION_NDEF_DISCOVERED意图以及关于标签和其它信息,例如有效载荷封装该URI 。
另一方面,如果遇到的记录类型TNF_UNKNOWN,它创建一个意图封装标签。




2.应用如何调度NFC标签


当标签调度系统完成创建意图封装NFC标签及其识别信息,发送的意图给感兴趣的应用程序过滤器的意图。
如果有一个以上的应用程序可以处理这个意图,活动选择,使用户可以选择的活动。
标签调度系统定义了三个意图,最高到最低优先级的顺序列出:


ACTION_NDEF_DISCOVERED:包含NDEF负载的标签被扫描时,这个意图是用来启动一个活动,是一个公认的类型。
这是最高优先级的意图,标签调度系统试图启动一个活动,在任何其他意图中,这个意图最可能被启动。
ACTION_TECH_DISCOVERED:如果没有活动注册来处理ACTION_NDEF_DISCOVERED 意图,标签调度系统试图启动
一个应用程序,这个意图。这个意图也直接启动(不启动先ACTION_NDEF_DISCOVERED)如果标签被扫描包含NDEF
数据不能被映射到一个MIME类型或URI,或者如果标签不包含NDEF数据,或者是其它标签标准。
ACTION_TAG_DISCOVERED:此意图是开始,如果没有活动处理ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED的
意图。


标签调度系统的基本工作原理如下:?
尝试启动一个活动的意图时所建立的标签调度系统解析(无论是ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED
的 NFC标签 )。
如果没有这一意图过滤器的活动,尝试启动一个活动的下一个优先级最低的意图(无论是ACTION_TECH_DISCOVERED
或ACTION_TAG_DISCOVERED的),直到应用程序过滤到这个意图。标签调度系统尝试所有可能的意图,
如果没有应用程序过滤器的任何意图,什么也不做。




只要有可能,应该使用NDEF消息和ACTION_NDEF_DISCOVERED的意图的工作,因为它在三个意图中有最高的优先级。
避免了选择框的出现,可以给用户更好的体验。


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读