NFCreader(ISO15693)NFC相关技术详解(附源代码)NFC reader ( ISO 15693 ) NFC相关技术详解
本⽂主要介绍Android系统中,使⽤ISO 15693协议读取NDEF message的相关技术,并结源代码进⾏讲解
概述
本⽂主要介绍在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协议的组织,官⽹如下:
那么NDEF协议是什么意思呢?
源代码电影讲解简单地说,就是把所有的NFC数据都都放到⼀个新的数据结构⾥,叫做NDEF message
这个NDEF message可以包含⼀条或多条NDEF record
每条NDEF record都必须严格按照指定的规范来⽣成
Android也⽀持其他种类的NFC数据,要处理这些类型的NFC tag,需要⾃⼰去写基于底层的协议栈
这个如果有需求可以留⾔,楼主以后写,这篇⽂章主要讲NDEF格式的NFC数据
完整的NDEF协议,可以在下⾯这个地址到:
不过我们不需要了解得特别细致,把这篇⽂章⾥的东西看懂了就差不多了
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应该包含以下信息:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论