什么是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
2
3
4
ISO 14443	RFID卡标准(非接触IC卡),该标准又有很多子标准
ISO 7816 接触式IC卡标准
ISO 15693 NfcV NXP ICODE SLIX 卡 就是基于这个标准
ISO 18092 NFC标准

出处

什么是 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标签前台调度系统

android nfc常用标签读取

NfcV(ISO 15693)读写操作

uni-app 开发 NFC

使用 Native.js 官方文档

DCloud 封装了一套可以通过 js 调用安卓原生 api 的代码。这个东西就是 Native.js 。但调研了一番,依旧和 uni-app 一样有很多坑。
这是 DCloud 的原话:

由于NJS是直接调用Native API,需要对Native API有一定了解,知道所需要的功能调用了哪些原生API,能看懂原生代码并参考原生代码修改为JS代码。

现在我们的安卓app,实现 NFC 读写功能就是通过这个东西来实现的。

官方文档上面没有具体说明 java 上各种数据类型定义,如何通过这个 js 来进行实现。

安卓 NFC api 接口

文档