场景介绍
应用或其他模块可以通过接口访问多种协议或技术的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);
请发表评论