2022年AndroidNFC开发介绍[参 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年AndroidNFC开发介绍[参 .pdf》由会员分享,可在线阅读,更多相关《2022年AndroidNFC开发介绍[参 .pdf(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、API 概览Android.nfc 和 android.nfc.tech 为 android 处理 nfc 的 java 包.1.Android.nfc package包含顶层类用来与本地NFC适配器交互.这些类可以表示被检测到的tags 和用 NDEF数据格式。类描述NfcManager一个 NFC adapter 的管理器,可以列出所有此android设备支持的NFC adapter.只不过大部分android 设备只有一个NFC adapter,所以你大部分情况下可以直接用静态方法 getDefaultAdapter(context)来取适配器。NfcAdapter表示本设备的NFC a
2、dapter,可以定义 Intent来请求将系统检测到tags 的提醒发送到你的Activity.并提供方法去注册前台tag 提醒发布和前台NDEF 推送。前台 NDEF推送是当前android 版本唯一支持的p2p NFC 通信方式。NdefMessageAnd NdefRecordNDEF是 NFC论坛定义的数据结构,用来有效的存数据到NFC tags.比如文本,URL,和其他MIME类型。一个 NdefMessage 扮演一个容器,这个容器存哪些发送和读到的数据。一个NdefMessage对象包含 0 或多个 NdefRecord,每个 NdefRecord 有一个类型,比如文本,URL
3、,智慧型海报/广告,或其他MIME数据。在 NdefMessage 里的第一个 NfcRecord 的类型用来发送tag 到一个 android设备上的activity.Tag标示一个被动的NFC目标,比如 tag,card,钥匙挂扣,甚至是一个电话模拟的的NFC卡.当一个 tag 被检测到,一个tag 对象将被创建并且封装到一个Intent里,然后 NFC 发布系统将这个Intent用 startActivity发送到注册了接受这种Intent的 activity里。你可以用 getTechList()方法来得到这个tag 支持的技术细节和创建一个android.nfc.tech提供的相应的
4、TagTechnology 对象。2.android.nfc.tech package包含那些对tag 查询属性和进行I/O 操作的类。这些类分别标示一个tag支持的不同的NFC 技术标准。类描述TagTechnology这个接口是下面所有tag technology类必须实现的。NfcA支持 ISO 14443-3A 标准的操作。Provides access to NFC-A(ISO 14443-3A)properties and I/O operations.NfcBProvides access to NFC-B(ISO 14443-3B)properties and I/O oper
5、ations.NfcFProvides access to NFC-F(JIS 6319-4)properties and I/O operations.NfcVProvides access to NFC-V(ISO 15693)properties and I/O operations.IsoDepProvides access to ISO-DEP(ISO 14443-4)properties and I/O operations.Ndef提供对那些被格式化为NDEF 的 tag 的数据的访问和其他操作。Provides access to NDEF data and operation
6、s on NFC tags that have been formatted as NDEF.NdefFormatable对那些可以被格式化成NDEF 格式的 tag 提供一个格式化的操作MifareClassic如果 android设备支持 MIFARE,提供对 MIFARE Classic 目标的属性和I/O 操作。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 22 页 -MifareUltralight如果 android设备支持 MIFARE,提供对 MIFARE Ultralight目标的属性和I/O 操作。API 版本区别1.API level 9以前不支持NFC
7、2.API level 9只包含有限的tag(标签)支持,包括:1).通过 ACTION_TAG_DISCOVERED来发布 Tag 信息3).只有通过 EXTRA_NDEF_MESSAGES扩展来访问NDEF消息3).其他的 tag 属性和 I/O 操作都不支持API level 10实现对 tag 的广泛的读写支持。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 22 页 -Android NFC API Reference NFC简洁近场通信(NFC)是一个短范围无线技术集合,通常需要4 厘米或更短的距离才能初始化连接。NFC允许在 NFC标签和 Android 设备之间或
8、两个Android设备之间共享小的数据的负载。NFC标签具有复杂的分类。简单的 NFC标签只提供读写语法,某些时候一次只能以只读的方式读取卡片的可编程区域。复杂一点的NFC标签提供了数学运算能力,而且有加密的硬件来认证对一个扇区的访问。最复杂的 NFC标签包含了运算环境,允许在标签上执行复杂的交互代码。存储在标签中的数据也可以用各种格式来编写,但是大多数的Android 框架 API 都使用基于NDEF(NFC Data Exchange Format)的标准。1.NFC基础本文介绍在Android 系通过你所能执行的基本任务?它解释了如何用NDEF消息格式来发送和接收NFC数据,并且介绍了支
9、持这些功能的Android 框架 API?有关更高级的话题,包括对非NDEF格式数据的讨论,情况“高级NFC”NDEF 数据和 Android 一起工作的场景主要有两个:1.从 NFC标签中读取NDEF数据;【读数据】2.把 NDEF消息从一个设备发送给另一个设备?【数据传递】从 NFC标签中读取NDEF数据是用标签调度系统来处理的,它会分析被发现的NFC标签,对数据进行适当的分类,并启动对该类数据感兴趣的应用程序?想要处理被扫描到NFC标签的应用程序会声明一个Intent过滤器,并请求处理数据?Android Beam?功能允许设备把一个NDEF 消息推送到物理/硬件上相互监听的另一个设备上
10、?这种交互提供了比其他无线技术(如蓝牙)更容易的发送数据的方法?因为 NFC不需要手动的设备发现或配对要求,两个设备在接近到一定范围时会自动的连接?Android Beam 通过一组NFC API 来使用,以便应用程序能够在设备之间来传输信息?例如,通信录?浏览器以及YouTube等应用程序都使用Android Beam来跟其他设备共享通信录?网页和视频?1.1 NFC 标签调度系统(The Tag Dispatch System)通常,除非是在设备的设置菜单中NFC被禁用,否则 Android设备会在非锁屏的状态下搜索NFC?当Android 设备发现 NFC标签时,期望的行为是用最合适的A
11、ctivity来处理该Intent,而不是询问用户使用什么应用程序?因为设备只能在很短的范围内扫描到NFC标签,强制的让用户手动的选择一个Activity,会导致设备离开 NFC标签,从而中断该连接?你应该开发你自己的Activity来处理你所关心的NFC标签,从而阻止选择器的操作?为了帮助你达到这个目标,Android提供了特殊的标签调度系统,来分析扫描到的NFC标签,通过解析数据,在被扫描到的数据中尝试找到感兴趣的应用程序,具体做法如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 22 页 -1.解析 NFC标签并搞清楚标签中标识数据负载的MIME类型或 URI;2.把
12、MIME类型或 URI 以及数据负载封装到一个Intent中?3.基于 Intent来启动 Activity?1.1.1 怎样把 NFC 标签映射到MIME类型和 URI开始编写 NFC应用程序之前,重要的是要理解不同类型的NFC标签?标签调度系统是如何解析NFC标签的?以及在检测到NDEF消息时,标签调度系统所做的特定的工作等?NFC标签涉及到广泛的技术,并且有很多不同的方法向标签中写入数据?Android 支持由 NFC Forum所定义的 NDEF标准?NDEF 数据被封装在一个消息(NdefMessage)中,该消息中包含了一条或多条记录(NdefRecord)?每个NDEF记录必须具
13、有良好的你想要创建的记录类型的规范的格式?Android 也支持其他的不包含NDEF数据类型的标签,你能够使用android.nfc.tech包中的类来工作?要使用其他类型标签来工作,涉及到编写自己的跟该标签通信的协议栈,因此我们建议你尽可能的使用NDEF,以便减少开发难度,并且最大化的支持Android设备?注意:要下载完整的NDEF 规范,请去“NFC论坛规范下载”网址来下载?现在,你已经具备了一些NFC标签的背景知识,接下来要详细的介绍Android 是如何处理NDEF格式的标签的?当 Android 设备扫描到包含NDEF格式数据的NFC标签时,它会解析该消息,并尝试搞清楚数据的MIM
14、E类型或 URI 标识?首先系统会读取消息(NdefMessage)中的第一条NdefRecord,来判断如何解释整个NDEF 消息(一个 NDEF 消息能够有多条NDEF记录)?在格式良好的NDEF消息中,第一条 NdefRecord 包含以下字段信息:1)3-bit TNF(类型名称格式)指示如何解释可变长度类型字段,在下表 1 中介绍有效值?2)可变长度类型说明记录的类型,如果使用 TNF_WELL_KNOWN,那么则使用这个字段来指定记录的类型定义(RTD)?在下表 2 中定义了有效的RTD值?3)可变长度 ID 唯一标识该记录?这个字段不经常使用,但是,如果需要唯一的标识一个标记,那
15、么就可以为该字段创建一个ID?4)可变长度负载你想读/写的实际的数据负载?一个 NDEF消息能够包含多个NDEF记录,因此不要以为在 NDEF消息的第一条NDEF记录中包含了所有的负载?标签调度系统使用TNF和类型字段来尝试把MIME类型或 URI 映射到 NDEF 消息中?如果成功,它会把信息跟实际的负载一起封装到ACTION_NEDF_DISCOVERED类型的 Intent中?但是,会有标签调度系统不能根据第一条 NDEF记录来判断数据类型的情况,这样就会有NDEF数据不能被映射到MIME类型或 URI,或者是 NFC标签没有包含NDEF 开始数据的情况发生?在这种情况下,就会用一个标签
16、技术信息相关的Tag 对象和封装在ACTION_TECH_DISCOVERED类型 Intent对象内部的负载来代替?表 1.介绍标签调度系统映射如何把TNF和类型字段映射到MIME型或 URI 上?同时也介绍了那种类型的TNF不能被映射到MIME类型或 URI 上?这种情况下,标签调度系统会退化到ACTION_TECH_DISCOVERED类型的Intent对象?例如,如果标签调度系统遇到一个TNF_ABSOLUTE_URI类型的记录,它会把这个记录的可变长度类型字段映射到一个URI 中?标签调度系统会把这个URI 跟其他相关的标签的信息(如数据负载)一起封装到ACTION_NDEF_DIS
17、COVERED的 Intent对象中?在另一方面,如果遇到了TNF_UNKNOWN类型,它会创建一个封装了标签技术信息的Intent对象来代替?表 1.所支持的 TNF和它们的映射类型名称格式(TNF)映射名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 22 页 -TNF_ABSOLUTE_URI基于类型字段的URI TNF_EMPTY 退化到 ACTION_TECH_DISCOVERED类型的 Intent对象TNF_EXTERNAL_TYPE 基于类型字段中URN 的 URI?URN是缩短的格式(:service_name)被编码到NDEF 类型中?Android会把这个 U
18、RN 映射成以下格式的URI:vnd.android.nfc:/ext/:TNF_MIME_MEDIA 基于类型字段的MIME类型TNF_UNCHANGED 退化到 ACTION_TECH_DISCOVERED类型的 Intent对象TNF_UNKNOWN 退化到 ACTION_TECH_DISCOVERED类型的 Intent对象TNF_WELL_KNOWN 依赖你在类型字段中设置的记录类型定义(RTD)的 MIME类型或 URI 表 2.TNF_WELL_KNOWN所支持的 RTD和它们的映射记录类型定义(RTD)映射RTD_ALTERNATIVE_CARRIER 退化到 ACTION_T
19、ECH_DISCOVERED类型的 Intent对象RTD_HANDOVER_CARRIER 退化到 ACTION_TECH_DISCOVERED类型的 Intent对象RTD_HANDOVER_REQUEST 退化到 ACTION_TECH_DISCOVERED类型的 Intent对象RTD_HANDOVER_SELECT退化到 ACTION_TECH_DISCOVERED类型的 Intent对象RTD_SMART_POSTER基于负载解析的URI RTD_TEXTtext/plain类型的 MIME RTD_URI基于有效负载的URI 1.1.2 应用程序如何调度NFC 标签当标签调度系统
20、完成对NFC标签和它的标识信息封装的Intent 对象的创建时,它会把该Intent 对象发送给感兴趣的应用程序。如果有多个应用程序能够处理该Intent 对象,就会显示Activity 选择器,让用户选择 Activity。标签调度系统定义了三种Intent 对象,以下按照由高到低的优先级列出这三种Intent 对象:1.ACTION_NDEF_DISCOVERED:这种 Intent 用于启动包含NDEF负载和已知类型的标签的Activity。这是最高优先级的Intent,并且标签调度系统在任何其他Intent 之前,都会尽可能的尝试使用这种类型的Intent来启动 Activity。2.
21、ACTION_TECH_DISCOVERED:如果没有注册处理ACTION_NDEF_DISCOVERED 类型的 Intent 的 Activity,那么标签调度系统会尝试使用这种类型的Intent 来启动应用程序。如果被扫描到的标签包含了不能被映射到 MIME 类型或 URI 的 NDEF数据,或者没有包含NDEF数据,但是是已知的标签技术,那么也会直接启动这种类型的Intent 对象(而不是先启动ACTION_NDEF_DISCOVERED类型的 Intent)3.ACTION_TAB_DISCOVERED:如果没有处理ACTION_NDEF_DISCOVERED或 ACTION_TEC
22、H_DISCOVERED类型 Intent 的 Activity,就会启动这种类型的Intent。标签调度系统的基本工作方法如下:1.用解析 NFC标签时由标签调度系统创建的Intent 对象(ACTION_NDEF_DISCOVERED或ACTION_TECH_DISCOVERED)来尝试启动Activity;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 22 页 -2.如果没有对应的处理Intent 的 Activity,那么就会尝试使用下一个优先级的Intent(ACTION_TECH_DISCOVERED或 ACTION_TAG_DISCOVERED)来启动Activi
23、ty,直到有对应的应用程序来处理这个 Intent,或者是直到标签调度系统尝试了所有可能的Intent。3.如果没有应用程序来处理任何类型的Intent,那么就不做任何事情。在可能的情况下,都会使用 NDEF消息和 ACTION_NDEF_DISCOVERED类型的 Intent 来工作,因为它是这三种 Intent 中最标准的。这种 Intent 与其他两种Intent 相比,它会允许你在更加合适的时机来启动你的应用程序,从而给用户带来更好的体验。图 1.标签调度系统1.2 在 Android的 Manifest中申请 NFC 访问在访问设备的NFC硬件和正确的处理NFC的 Intent 之
24、前,要在AndroidManifest.xml文件中进行以下声明:1.在元素中声明访问NFC硬件:2.你的应用程序所支持的最小的SDK版本。API Level 9只通过 ACTION_TAG_DISCOVERED来支持有限的标签调度,并且只能通过EXTRA_NDEF_MESSAGES来访问 NDEF消息。没有其他的标签属性或I/O 操作可用。API Level 10中包含了广泛的读写支持,从而更好的推动了NDEF的应用前景,并且 API Leve 14用 Android Beam和额外的方便的创建NDEF记录的方法,向外提供了更容易的把NDEF消息推送给其他设备的方法。3.使用 uses-fe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年AndroidNFC开发介绍参 2022 AndroidNFC 开发 介绍
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内