鸿蒙OS Tag读写
场景介绍
应用或其他模块可以通过接口访问多种协议或技术的Tag卡片。
接口说明
类名 | 接口名 | 功能描述 |
---|---|---|
TagInfo | getTagId() | 获取当前 Tag 的 ID。 |
getTagSupportedProfiles() | 获取当前 Tag 支持的协议或技术。 | |
isProfileSupported(int profile) | 判断 Tag 是否支持指定的协议或技术。 | |
TagManager | getTagInfo() | 获取标签信息。 |
connectTag() | 建立与 Tag 设备的连接。 | |
reset() | 重置与 Tag 设备的连接,同时会把写 Tag 的超时时间恢复为默认值。 | |
isTagConnected() | 判断与 Tag 设备是否保持连接。 | |
setSendDataTimeout(int timeout) | 设置发送数据到 Tag 的超时时间,单位是 ms。 | |
getSendDataTimeout() | 查询发送数据到 Tag 设备的超时时间,单位是 ms。 | |
sendData(byte[] data) | 写数据到 Tag 设备中。 | |
checkConnected() | 检查 Tag 设备是否已连接。 | |
getMaxSendLength() | 获取发送数据的最大长度。在发送数据到 Tag 设备时,用于查询最大可发送数据的长度。 | |
IsoDepTag | IsoDepTag(TagInfo tagInfo) | 根据分发 Tag信息获取 IsoDep 类型 Tag 标签对象。 |
getHiLayerResponse() | 获取基于 NfcB 技术的 IsoDep 类型 Tag 的高层响应内容。 | |
getHistoricalBytes() | 获取基于 NfcA 技术的 IsoDep 类型 Tag 的历史字节内容。 | |
NfcATag | getInstance(TagInfo tagInfo) | 根据分发 Tag 信息获取 NfcA 标签对象。 |
getSak() | 获取 NfcA 类型 Tag 的 SAK。 | |
getAtqa() | 获取 NfcA 类型 Tag 的 ATQA。 | |
NfcBTag | getInstance(TagInfo tagInfo) | 根据分发 Tag 信息获取 NfcB 标签对象。 |
getRespAppData() | 获取 NfcB 标签对象的应用数据。 | |
getRespProtocol() | 获取 NfcB 标签对象的协议信息。 | |
NdefTag | getNdefMessage() | 获取当前连接的 NDEF Tag 设备的 NDEF 信息。 |
getNdefMaxSize() | 获取最大的 NDEF 信息尺寸。 | |
getTagType() | 获取 NDEF Tag 设备类型。 | |
readNdefMessage() | 从当前连接的 NDEF Tag 设备读取 NDEF 信息。 | |
writeNdefMessage(NdefMessage msg) | 写 NDEF 信息到当前连接的 NDEF Tag 设备。 | |
canSetReadOnly() | 检查 NDEF Tag 设备是否可被设置为只读。 | |
setReadOnly() | 设置 NDEF Tag 设备为只读。 | |
isNdefWritable() | 判断 NDEF Tag 设备是否可写。 | |
MifareClassicTag | getInstance(TagInfo tagInfo) | 根据分发 Tag 信息获取 MifareClassic 标签对象。 |
getMifareType() | 获取 MifareClassic Tag 设备的 Mifare 类型。 | |
getTagSize() | 获取 MifareClassic Tag 设备的尺寸。 | |
getSectorsNum() | 获取 MifareClassic Tag 设备内所有扇区数。 | |
getBlocksNum() | 获取 MifareClassic Tag 设备内所有块数。 | |
getBlocksNumForSector(int sectorId) | 获取 MifareClassic Tag 设备内一个扇区的块数。 | |
getSectorId(int blockId) | 用块ID获取 MifareClassic Tag 设备内扇区号。 | |
getFirstBlockId(int sectorId) | 获取 MifareClassic Tag 设备内特定扇区的第一个块 ID。 | |
authenSectorUseKey(int sectorId, byte[] key, byte keyType) | 用密钥鉴权 MifareClassic Tag 设备内特定扇区。 | |
readBlock(int blockId) | 读取 MifareClassic Tag 设备内特定块内容。 | |
writeBlock(int blockId, byte[] data) | 在 MifareClassic Tag 设备内特定块写内容。 | |
incBlock(int blockId, int value) | 在 MifareClassic Tag 设备内特定块的内容加上一个值。 | |
decBlock(int blockId, int value) | 从 MifareClassic Tag 设备内特定块的内容减去一个值。 | |
restoreBlock(int blockId) | 把 MifareClassic Tag 设备内特定块的内容移动到一个内部的缓存区。 | |
MifareUltralightTag | getInstance(TagInfo tagInfo) | 根据分发 Tag 信息获取 MifareUltralight 标签对象。 |
getMifareType() | 获取 MifareUltralight Tag 设备类型。 | |
readFourPages(int pageOffset) | 从 MifareUltralight Tag 设备的特定页数开始读四页。 | |
writeOnePage(int pageOffset, byte[] data) | 在 MifareUltralight Tag 设备的特定页数写数据。 |
读取卡片类型
- 从 Intent 中获取 TagInfo,初始化 TagInfo 实例。
- TagInfo 实例调用 getTagSupportedProfiles()接口查询当前 Tag 支持的技术或协议类型。
- 调用 isProfileSupported(int profile)接口查询是否支持 NfcA、IsoDep、MifareClassic 等类型。若支持,可使用 TagInfo 实例构造 NfcATag、IsoDep、MifareClassic 等实例。
- 根据不同的 Tag 技术类型的实例,调用不同的API完成 Tag 的访问。
// 从Intent中获取TagInfo,初始化TagInfo实例
TagInfo tagInfo = getIntent().getParcelableExtra(NfcController.EXTRA_TAG_INFO);
// 查询Tag设备支持的技术或协议,返回值为支持的技术或协议列表
int[] profiles = tagInfo.getTagSupportedProfiles();
// 查询是否支持NfcA,若支持,构造一个NfcATag
boolean isSupportedNfcA = tagInfo.isProfileSupported(TagManager.NFC_A);
if (isSupportedNfcA) {
NfcATag tagNfcA = NfcATag.getInstance(tagInfo);
}
// 查询是否支持NfcB,若支持,构造一个NfcBTag
boolean isSupportedNfcB = tagInfo.isProfileSupported(TagManager.NFC_B);
if (isSupportedNfcB) {
NfcBTag tagNfcB = NfcBTag.getInstance(tagInfo);
}
// 查询是否支持IsoDep,若支持,构造一个IsoDepTag
boolean isSupportedIsoDep = tagInfo.isProfileSupported(TagManager.ISO_DEP);
if (isSupportedIsoDep) {
IsoDepTag tagIsoDep = new IsoDepTag(tagInfo);
}
// 查询是否支持NDEF,若支持,构造一个NdefTag
boolean isSupportedNdefDep = tagInfo.isProfileSupported(TagManager.NDEF);
if (isSupportedNdefDep) {
NdefTag tagNdef = new NdefTag(tagInfo);
}
// 查询是否支持MifareClassic,若支持,构造一个MifareClassicTag
boolean isSupportedMifareClassic = tagInfo.isProfileSupported(TagManager.MIFARE_CLASSIC);
if (isSupportedMifareClassic) {
MifareClassicTag mifareClassicTag = MifareClassicTag.getInstance(tagInfo);
}
// 查询是否支持MifareUltralight,若支持,构造一个MifareUltralightTag
boolean isSupportedMifareUltralight = tagInfo.isProfileSupported(TagManager.MIFARE_ULTRALIGHT);
if (isSupportedMifareUltralight) {
MifareUltralightTag mifareUltralightTag = MifareUltralightTag.getInstance(tagInfo);
}
访问 NfcA 卡片
- 调用 connectTag() 接口连接 Tag 设备。
- 调用 isTagConnected()接口查询 Tag 设备连接状态。
- 调用 sendData(byte[] data)接口发送数据到 Tag。
// 连接 Tag 设备,返回值为是否连接成功
boolean connSuccess = tagNfcA.connectTag();
// 查询Tag连接状态
boolean isConnected= tagNfcA.isTagConnected();
// 发送数据到Tag,返回值为Tag的响应数据
byte[] data = {0x13, 0x59, 0x22};
byte[] response = tagNfcA.sendData(data);
访问 NfcB 卡片
- 调用 connectTag() 接口连接 Tag 设备。
- 调用 isTagConnected() 接口查询 Tag 设备连接状态。
- 调用 sendData(byte[] data) 接口发送数据到 Tag。
// 连接Tag设备,返回值为是否连接成功
boolean connSuccess = tagNfcB.connectTag();
// 查询Tag连接状态
boolean isConnected= tagNfcB.isTagConnected();
// 发送数据到Tag,返回值为Tag的响应数据
byte[] data = {0x13, 0x59, 0x22};
byte[] response = tagNfcB.sendData(data);
访问 IsoDep 卡片
- 调用getTagInfo()接口获取TagInfo对象。
- 调用connectTag()接口连接Tag设备。
- 调用isTagConnected()接口查询Tag设备连接状态。
- 调用sendData(byte[] data)接口发送数据到Tag。
// 连接Tag设备,返回值为是否连接成功
boolean connSuccess = tagIsoDep.connectTag();
// 查询Tag连接状态
boolean isConnected= tagIsoDep.isTagConnected();
// 发送数据到Tag,返回值为Tag的响应数据
byte[] data = {0x13, 0x59, 0x22};
byte[] response = tagIsoDep.sendData(data);
访问Ndef卡片
- 调用 getTagInfo()接口获取 TagInfo 对象。
- 调用 connectTag()接口连接 Tag 设备。
- 调用 isTagConnected()接口查询 Tag 设备连接状态。
- 调用 sendData(byte[] data)接口发送数据到 Tag。
// 连接Tag设备,返回值为是否连接成功
boolean connSuccess = tagNdef.connectTag();
// 查询Tag连接状态
boolean isConnected = tagNdef.isTagConnected();
// 发送数据到Tag,返回值为Tag的响应数据
byte[] data = {0x13, 0x59, 0x22};
byte[] response = tagNdef.sendData(data);
访问 MifareClassic 卡片
- 调用 getTagInfo()接口获取 TagInfo 对象。
- 调用 connectTag()接口连接 Tag 设备。
- 调用 isTagConnected()接口查询 Tag 设备连接状态。
- 调用 sendData(byte[] data)接口发送数据到 Tag。
// 连接Tag设备,返回值为是否连接成功
boolean connSuccess = mifareClassicTag.connectTag();
// 查询Tag连接状态
boolean isConnected = mifareClassicTag.isTagConnected();
// 发送数据到Tag,返回值为Tag的响应数据
byte[] data = {0x13, 0x59, 0x22};
byte[] response = mifareClassicTag.sendData(data);
访问 MifareUltralight 卡片
- 调用 getTagInfo() 接口获取 TagInfo 对象。
- 调用 connectTag() 接口连接 Tag 设备。
- 调用 isTagConnected() 接口查询 Tag 设备连接状态。
- 调用 sendData(byte[] data) 接口发送数据到 Tag。
// 连接Tag设备,返回值为是否连接成功
boolean connSuccess = mifareUltralightTag.connectTag();
// 查询Tag连接状态
boolean isConnected = mifareUltralightTag.isTagConnected();
// 发送数据到Tag,返回值为Tag的响应数据
byte[] data = {0x13, 0x59, 0x22};
byte[] response = mifareUltralightTag.sendData(data);