浅谈Android开发中的NFC功能(1)

主要是一种用于在运行的程序中,处理NFC tag的技术,使得当前Activity能直接响应NFC标签,而不需要用户在选择所有能处理的Activity,之所以要使用到此系统的原因,就是因为当android设备扫描到一个NFC tag,通用的行为是自动找最合适的Activity会处理这个tag Intent而不需要用户来选择哪个Activity来处理。因为设备扫描NFC tags是在很短的范围和时间,如果让用户选择的话,那就有可能需要移动设备,这样将会打断这个扫描过程,从而中断该连接。

在实现当前Activity能直接响应NFC标签这个功能中使用到了tag分发系统,其包括了Intent发布系统与前台Activity发布系统,帮助正确的识别一个NFC tag是否是你的Activity想要处理的。对于前台Activity发布系统与Intent发布系统各自的作用为:

  • 前台发布系统允许一个Activity覆盖掉Intent发布系统而首先处理此tag Intent,这要求你将要处理Tag Intent的Activity运行在前台,这样当一个NFC tag被扫描到,系统先检测前台的Activity是否支持处理此Intent,如果支持,即将此Intent传给此Activity,如果不支持,则转到Intent发布系统。
  • Intent发布系统检查所有Activities的intent filters,找出那些定义了可以处理此tag的Activity,如果有多个Activity都配置了处理同一个tag Intent,那么将使用Activity选择器来让用户选择使用哪个Activity。用户选择之后,将使用选择的Activity来处理此Intent.

2.2.5 NFC标签调度系统及标签解析过程

NFC标签调度系统用于分析扫描到的NFC标签,通过解析数据,在被扫描到的数据中尝试找到最适合的应用程序。

当系统检测到一个NFC标签的时候,会自动去寻找最合适的activity去处理这个intent.而此Intent定义了三种action:ACTION_NDEF_DISCOVERED、ACTION_TECH_DISCOVERED、ACTION_NDEF_DISCOVERED,三种action具体为:

ACTION_NDEF_DISCOVERED:当系统检测到tag中含有NDEF格式的数据时,且系统中有activity声明可以接受包含NDEF数据的Intent的时候,系统会优先发出这个action的intent。

ACTION_TECH_DISCOVERED:当没有任何一个activity声明自己可以响应ACTION_NDEF_DISCOVERED时,系统会尝试发出TECH的intent.即便tag中所包含的数据是NDEF的,但如果这个数据的MIME type或URI不能和任何一个activity所声明的吻合,系统也一样会尝试发出tech格式的intent,而不是NDEF.

ACTION_TAG_DISCOVERED:当系统发现前两个intent在系统中无人会接受的时,会用一个标签技术信息相关的默认Tag对象来代替,发送此默认的TAG类型的。

NFC标签调度系统对NFC标签进行解析的过程为:

1. 对接收到的NFC标签数据进行解析,搞清楚标签中标识数据负载的MIME类型或URI等信息。

2. 将MIME类型或URI等数据以及数据负载封装到一个Intent中。

3. 基于Intent来启动Activity,将Intent对象发送给感兴趣的应用程序(以下几点为对第三点完成过程的具体阐述)。

4. 用解析NFC标签时由标签调度系统创建的Intent对象(ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED)来尝试启动Activity;

5. 如果没有对应的处理Intent的Activity,那么就会尝试使用下一个优先级的Intent(ACTION_TECH_DISCOVERED或ACTION_TAG_DISCOVERED)来启动Activity,直到有对应的应用程序来处理这个Intent,或者是直到标签调度系统尝试了所有可能的Intent。

6. 如果没有应用程序来处理任何类型的Intent,那么就不做任何事情。

下图为标签调度的流程:

标签调度流程

而NFC标签过滤有四种即使用上述提过知识点进行:1.过滤ACTION_NDEF_DISCOVERED 。2.过滤ACTION_TECH_DISCOVERED 。3.过滤ACTION_TAG_DISCOVERED 。4.nfc标签前台调度系统。各种方法的具体实现可去查看下方的参考博客链接。

2.3 实现NFC功能代码的基本步骤


进行支持NFC程序的开发时的基本步骤为:

1. 在AndroidManifest.xml中进行权限声明以及添加intent-filter过滤器进行支持。

进行权限声明:

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值