NFC reader ( ISO 15693 ) NFC相关技术详解(附源代码)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24118527/article/details/89177202

NFC reader ( ISO 15693 ) NFC相关技术详解

本文主要介绍Android系统中,使用ISO 15693协议读取NDEF message的相关技术,并结源代码进行讲解

源代码地址:https://github.com/nikolajohn/Reader_of_NFCv


概述

本文主要介绍在Android框架下NFC检测相关的技术

以及如何调用NFC相关的API

从而完成NDEF message格式的NFC数据

关于NDEF Message,主要存在以下两种应用场景:

  • 从NFC tag中读取NDEF数据
  • 使用Android Beam处理NDEF数据

在Android系统中,tag dispatch system(一些书里对这个强行中文翻译,但楼主觉得中文容易引起歧义,因此保留英文)

用于分析手机NFC天线检测到的NFC tag

然后对接收到的数据进行简单的分类,并将分类好的数据发给需要的应用程序

如果用户的应用程序需要去处理被扫描的NFC tag ,我们需要在intent filter里面进行声明

就像这样:

至于这里为什么要写这个

android.nfc.action.TECH_DISCOVERED

我们后面会提到

这篇文章主要写NDEF Message的处理,Android Beam方面的内容,楼主以后有机会再写


Tag dispatch system

只要设备的屏幕是点亮的,Android系统就会一直搜索NFC tag,除非系统设置里面禁用了NFC,或者设备没有NFC功能

当Android设备发现了NFC tag后,最希望的操作是有合适的activity去处理intent

而非让用户去选择,我用哪个应用程序去处理读取到的NFC tag(如果让用户选择就会用到Activity Chooser)

为什么这么说呢?

因为设备扫描NFC tag时,往往设备和NFC是贴得很近的

此时如果让用户去选择一个应用程序,很可能会导致连接的中断

为了避免这样的情况发生

Android的tag dispatch system完成了对检测到的NFC tag进行扫描、解析以及尝试定位最合适的应用程序的工作

为什么说是尝试呢?因为有可能出现没有最合适的应用程序来处理的情况,这时候就要用到file chooser了

tag dispatch system主要做下面这几件事:

1. 解析NFC tag,并找出能够指出payload的数据类型的MIME type或者URI,关于payload的介绍下面会讲到

2. 将找到的MIME type或者URI结合payload,一起打包封装进intent

3. 打开一个可以处理这个intent的activity

下面详细地介绍这个过程


NDEF

首先我们介绍一下NFC tag的种类,其实NFC tag可以分为很多种,有很多的技术可以完成对NFC tag进行读取和写入

在这些NFC相关的技术中,最为常用的还是NFC Forum指定的NDEF协议

NFC Forum是一个制定NFC协议的组织,官网如下:

https://nfc-forum.org/

那么NDEF协议是什么意思呢?

简单地说,就是把所有的NFC数据都都放到一个新的数据结构里,叫做NDEF message

这个NDEF message可以包含一条或多条NDEF record

每条NDEF record都必须严格按照指定的规范来生成

Android也支持其他种类的NFC数据,要处理这些类型的NFC tag,需要自己去写基于底层的协议栈

这个如果有需求可以留言,楼主以后写,这篇文章主要讲NDEF格式的NFC数据

完整的NDEF协议,可以在下面这个地址找到:

https://nfc-forum.org/our-work/specifications-and-application-documents/

不过我们不需要了解得特别细致,把这篇文章里的东西看懂了就差不多了


NFC tag映射到MIME type或URI

当Android设备扫描到含有NDEF格式数据的NFC标签时

tag dispatch system将会解析NDEF message,然后尝试找出数据的MIME type或URI

那么tag dispatch system具体是如何做到的呢?

其实很简单,tag dispatch system会读取NDEF message中的第一条NDEFrecord

通过从第一条NDEFrecord中获取的信息

决定tag dispatch system如何去解释整个的NDEF message

规范的第一条NDEF record应该包含以下信息:

猜你喜欢

转载自blog.csdn.net/qq_24118527/article/details/89177202
NFC
今日推荐