什么是NFC
RFID:射频识别技术,分为接触式(需要插卡)与非接触式(只需刷卡),NFC就是从这个技术发展而来的,包含多个频段,915MHz,125KHz,13.56MHz,2.4GHz等。
NFC:近场通讯技术,只能工作在13.56MHz,所以能读取全部工作在这个频段的卡,是属于 RFID 技术的,但是又有新的功能,可以理解为 RFID 的子类
NFC 的工作原理
操作通常都是主从式,即读卡器作为主动方发送命令,卡片收到命令后作出反应。
通过读卡器产生的电磁场获得能量并与读写器交换信息
常用载波频率有125KHz、134.2KHz、13.56MHz、2.45GHz等,通常载波频率越高,数据的传送速率越高,技术上也较复杂
NFC 的型号
NFC 厂商基于不同的国际标准,开发出的 NFC 芯片型号也不一样。
具体的有:NfcA NfcB NfcF NfcV Ndef Ndef…
在 java 中上不同的芯片型号,使用不同的类进行区分。也就是说不同的芯片有不同的读写方式。
1 | ISO 14443 RFID卡标准(非接触IC卡),该标准又有很多子标准 |
什么是 ISO15693
在安卓里面代表 ISO15693 协议的是 NfcV 这个类 查看相关 api
什么是 AFI 和 EAS ?
这是基于 ISO15693 标准芯片的存储块名称
存储器分为32个块、每个块由4字节(32位)组成,共128字节,如下图,上部4个块(-4、-3、-2、-1块)分别用于UID(64位唯一ID序列号)、特殊功能(EAS、AFI、DSFID)和写入控制位,其他28个块为用户数据块。
每个芯片都拥有一个全球唯一id
安卓上开发 NFC 调用读取的相关示例
NFC标签初始化、NFC标签读写数据功能、NFC标签前台调度系统
uni-app 开发 NFC
使用 Native.js 官方文档
DCloud 封装了一套可以通过 js 调用安卓原生 api 的代码。这个东西就是 Native.js 。但调研了一番,依旧和 uni-app 一样有很多坑。
这是 DCloud 的原话:
由于NJS是直接调用Native API,需要对Native API有一定了解,知道所需要的功能调用了哪些原生API,能看懂原生代码并参考原生代码修改为JS代码。
现在我们的安卓app,实现 NFC 读写功能就是通过这个东西来实现的。
官方文档上面没有具体说明 java 上各种数据类型定义,如何通过这个 js 来进行实现。