鴻蒙OS Tag讀寫

2020-09-18 14:57 更新

場景介紹

應(yīng)用或其他模塊可以通過接口訪問多種協(xié)議或技術(shù)的Tag卡片。

接口說明

類名 接口名 功能描述
TagInfo getTagId() 獲取當(dāng)前 Tag 的 ID。
getTagSupportedProfiles() 獲取當(dāng)前 Tag 支持的協(xié)議或技術(shù)。
isProfileSupported(int profile) 判斷 Tag 是否支持指定的協(xié)議或技術(shù)。
TagManager getTagInfo() 獲取標(biāo)簽信息。
connectTag() 建立與 Tag 設(shè)備的連接。
reset() 重置與 Tag 設(shè)備的連接,同時(shí)會把寫 Tag 的超時(shí)時(shí)間恢復(fù)為默認(rèn)值。
isTagConnected() 判斷與 Tag 設(shè)備是否保持連接。
setSendDataTimeout(int timeout) 設(shè)置發(fā)送數(shù)據(jù)到 Tag 的超時(shí)時(shí)間,單位是 ms。
getSendDataTimeout() 查詢發(fā)送數(shù)據(jù)到 Tag 設(shè)備的超時(shí)時(shí)間,單位是 ms。
sendData(byte[] data) 寫數(shù)據(jù)到 Tag 設(shè)備中。
checkConnected() 檢查 Tag 設(shè)備是否已連接。
getMaxSendLength() 獲取發(fā)送數(shù)據(jù)的最大長度。在發(fā)送數(shù)據(jù)到 Tag 設(shè)備時(shí),用于查詢最大可發(fā)送數(shù)據(jù)的長度。
IsoDepTag IsoDepTag(TagInfo tagInfo) 根據(jù)分發(fā) Tag信息獲取 IsoDep 類型 Tag 標(biāo)簽對象。
getHiLayerResponse() 獲取基于 NfcB 技術(shù)的 IsoDep 類型 Tag 的高層響應(yīng)內(nèi)容。
getHistoricalBytes() 獲取基于 NfcA 技術(shù)的 IsoDep 類型 Tag 的歷史字節(jié)內(nèi)容。
NfcATag getInstance(TagInfo tagInfo) 根據(jù)分發(fā) Tag 信息獲取 NfcA 標(biāo)簽對象。
getSak() 獲取 NfcA 類型 Tag 的 SAK。
getAtqa() 獲取 NfcA 類型 Tag 的 ATQA。
NfcBTag getInstance(TagInfo tagInfo) 根據(jù)分發(fā) Tag 信息獲取 NfcB 標(biāo)簽對象。
getRespAppData() 獲取 NfcB 標(biāo)簽對象的應(yīng)用數(shù)據(jù)。
getRespProtocol() 獲取 NfcB 標(biāo)簽對象的協(xié)議信息。
NdefTag getNdefMessage() 獲取當(dāng)前連接的 NDEF Tag 設(shè)備的 NDEF 信息。
getNdefMaxSize() 獲取最大的 NDEF 信息尺寸。
getTagType() 獲取 NDEF Tag 設(shè)備類型。
readNdefMessage() 從當(dāng)前連接的 NDEF Tag 設(shè)備讀取 NDEF 信息。
writeNdefMessage(NdefMessage msg) 寫 NDEF 信息到當(dāng)前連接的 NDEF Tag 設(shè)備。
canSetReadOnly() 檢查 NDEF Tag 設(shè)備是否可被設(shè)置為只讀。
setReadOnly() 設(shè)置 NDEF Tag 設(shè)備為只讀。
isNdefWritable() 判斷 NDEF Tag 設(shè)備是否可寫。
MifareClassicTag getInstance(TagInfo tagInfo) 根據(jù)分發(fā) Tag 信息獲取 MifareClassic 標(biāo)簽對象。
getMifareType() 獲取 MifareClassic Tag 設(shè)備的 Mifare 類型。
getTagSize() 獲取 MifareClassic Tag 設(shè)備的尺寸。
getSectorsNum() 獲取 MifareClassic Tag 設(shè)備內(nèi)所有扇區(qū)數(shù)。
getBlocksNum() 獲取 MifareClassic Tag 設(shè)備內(nèi)所有塊數(shù)。
getBlocksNumForSector(int sectorId) 獲取 MifareClassic Tag 設(shè)備內(nèi)一個(gè)扇區(qū)的塊數(shù)。
getSectorId(int blockId) 用塊ID獲取 MifareClassic Tag 設(shè)備內(nèi)扇區(qū)號。
getFirstBlockId(int sectorId) 獲取 MifareClassic Tag 設(shè)備內(nèi)特定扇區(qū)的第一個(gè)塊 ID。
authenSectorUseKey(int sectorId, byte[] key, byte keyType) 用密鑰鑒權(quán) MifareClassic Tag 設(shè)備內(nèi)特定扇區(qū)。
readBlock(int blockId) 讀取 MifareClassic Tag 設(shè)備內(nèi)特定塊內(nèi)容。
writeBlock(int blockId, byte[] data) 在 MifareClassic Tag 設(shè)備內(nèi)特定塊寫內(nèi)容。
incBlock(int blockId, int value) 在 MifareClassic Tag 設(shè)備內(nèi)特定塊的內(nèi)容加上一個(gè)值。
decBlock(int blockId, int value) 從 MifareClassic Tag 設(shè)備內(nèi)特定塊的內(nèi)容減去一個(gè)值。
restoreBlock(int blockId) 把 MifareClassic Tag 設(shè)備內(nèi)特定塊的內(nèi)容移動(dòng)到一個(gè)內(nèi)部的緩存區(qū)。
MifareUltralightTag getInstance(TagInfo tagInfo) 根據(jù)分發(fā) Tag 信息獲取 MifareUltralight 標(biāo)簽對象。
getMifareType() 獲取 MifareUltralight Tag 設(shè)備類型。
readFourPages(int pageOffset) 從 MifareUltralight Tag 設(shè)備的特定頁數(shù)開始讀四頁。
writeOnePage(int pageOffset, byte[] data) 在 MifareUltralight Tag 設(shè)備的特定頁數(shù)寫數(shù)據(jù)。

讀取卡片類型

  1. 從 Intent 中獲取 TagInfo,初始化 TagInfo 實(shí)例。

  1. TagInfo 實(shí)例調(diào)用 getTagSupportedProfiles()接口查詢當(dāng)前 Tag 支持的技術(shù)或協(xié)議類型。

  1. 調(diào)用 isProfileSupported(int profile)接口查詢是否支持 NfcA、IsoDep、MifareClassic 等類型。若支持,可使用 TagInfo 實(shí)例構(gòu)造 NfcATag、IsoDep、MifareClassic 等實(shí)例。

  1. 根據(jù)不同的 Tag 技術(shù)類型的實(shí)例,調(diào)用不同的API完成 Tag 的訪問。

   // 從Intent中獲取TagInfo,初始化TagInfo實(shí)例
   TagInfo tagInfo = getIntent().getParcelableExtra(NfcController.EXTRA_TAG_INFO);

    
   // 查詢Tag設(shè)備支持的技術(shù)或協(xié)議,返回值為支持的技術(shù)或協(xié)議列表
   int[] profiles = tagInfo.getTagSupportedProfiles();

    
   // 查詢是否支持NfcA,若支持,構(gòu)造一個(gè)NfcATag
   boolean isSupportedNfcA = tagInfo.isProfileSupported(TagManager.NFC_A);
   if (isSupportedNfcA) {
       NfcATag tagNfcA = NfcATag.getInstance(tagInfo);
   }

    
   // 查詢是否支持NfcB,若支持,構(gòu)造一個(gè)NfcBTag
   boolean isSupportedNfcB = tagInfo.isProfileSupported(TagManager.NFC_B);
   if (isSupportedNfcB) {
       NfcBTag tagNfcB = NfcBTag.getInstance(tagInfo);
   }

    
   // 查詢是否支持IsoDep,若支持,構(gòu)造一個(gè)IsoDepTag
   boolean isSupportedIsoDep = tagInfo.isProfileSupported(TagManager.ISO_DEP);
   if (isSupportedIsoDep) {
       IsoDepTag tagIsoDep = new IsoDepTag(tagInfo);
   }

    
   // 查詢是否支持NDEF,若支持,構(gòu)造一個(gè)NdefTag
   boolean isSupportedNdefDep = tagInfo.isProfileSupported(TagManager.NDEF);
   if (isSupportedNdefDep) {
       NdefTag tagNdef = new NdefTag(tagInfo);
   }

    
   // 查詢是否支持MifareClassic,若支持,構(gòu)造一個(gè)MifareClassicTag
   boolean isSupportedMifareClassic = tagInfo.isProfileSupported(TagManager.MIFARE_CLASSIC);
   if (isSupportedMifareClassic) {
       MifareClassicTag mifareClassicTag = MifareClassicTag.getInstance(tagInfo);
   }

    
   // 查詢是否支持MifareUltralight,若支持,構(gòu)造一個(gè)MifareUltralightTag
   boolean isSupportedMifareUltralight = tagInfo.isProfileSupported(TagManager.MIFARE_ULTRALIGHT);
   if (isSupportedMifareUltralight) {
       MifareUltralightTag mifareUltralightTag = MifareUltralightTag.getInstance(tagInfo);
   }

訪問 NfcA 卡片

  1. 調(diào)用 connectTag() 接口連接 Tag 設(shè)備。

  1. 調(diào)用 isTagConnected()接口查詢 Tag 設(shè)備連接狀態(tài)。

  1. 調(diào)用 sendData(byte[] data)接口發(fā)送數(shù)據(jù)到 Tag。

   // 連接 Tag 設(shè)備,返回值為是否連接成功
   boolean connSuccess = tagNfcA.connectTag();

    
   // 查詢Tag連接狀態(tài)
   boolean isConnected= tagNfcA.isTagConnected();

    
   // 發(fā)送數(shù)據(jù)到Tag,返回值為Tag的響應(yīng)數(shù)據(jù)
   byte[] data = {0x13, 0x59, 0x22};
   byte[] response = tagNfcA.sendData(data);

訪問 NfcB 卡片

  1. 調(diào)用 connectTag() 接口連接 Tag 設(shè)備。

  1. 調(diào)用 isTagConnected() 接口查詢 Tag 設(shè)備連接狀態(tài)。

  1. 調(diào)用 sendData(byte[] data) 接口發(fā)送數(shù)據(jù)到 Tag。

   // 連接Tag設(shè)備,返回值為是否連接成功
   boolean connSuccess = tagNfcB.connectTag();

    
   // 查詢Tag連接狀態(tài)
   boolean isConnected= tagNfcB.isTagConnected();

    
   // 發(fā)送數(shù)據(jù)到Tag,返回值為Tag的響應(yīng)數(shù)據(jù)
   byte[] data = {0x13, 0x59, 0x22};
   byte[] response = tagNfcB.sendData(data);

訪問 IsoDep 卡片

  1. 調(diào)用getTagInfo()接口獲取TagInfo對象。

  1. 調(diào)用connectTag()接口連接Tag設(shè)備。

  1. 調(diào)用isTagConnected()接口查詢Tag設(shè)備連接狀態(tài)。

  1. 調(diào)用sendData(byte[] data)接口發(fā)送數(shù)據(jù)到Tag。

   // 連接Tag設(shè)備,返回值為是否連接成功
   boolean connSuccess = tagIsoDep.connectTag();

    
   // 查詢Tag連接狀態(tài)
   boolean isConnected= tagIsoDep.isTagConnected();

    
   // 發(fā)送數(shù)據(jù)到Tag,返回值為Tag的響應(yīng)數(shù)據(jù)
   byte[] data = {0x13, 0x59, 0x22};
   byte[] response = tagIsoDep.sendData(data);

訪問Ndef卡片

  1. 調(diào)用 getTagInfo()接口獲取 TagInfo 對象。

  1. 調(diào)用 connectTag()接口連接 Tag 設(shè)備。

  1. 調(diào)用 isTagConnected()接口查詢 Tag 設(shè)備連接狀態(tài)。

  1. 調(diào)用 sendData(byte[] data)接口發(fā)送數(shù)據(jù)到 Tag。

   // 連接Tag設(shè)備,返回值為是否連接成功
   boolean connSuccess = tagNdef.connectTag();

    
   // 查詢Tag連接狀態(tài)
   boolean isConnected = tagNdef.isTagConnected();

    
   // 發(fā)送數(shù)據(jù)到Tag,返回值為Tag的響應(yīng)數(shù)據(jù)
   byte[] data = {0x13, 0x59, 0x22};
   byte[] response = tagNdef.sendData(data);

訪問 MifareClassic 卡片

  1. 調(diào)用 getTagInfo()接口獲取 TagInfo 對象。

  1. 調(diào)用 connectTag()接口連接 Tag 設(shè)備。

  1. 調(diào)用 isTagConnected()接口查詢 Tag 設(shè)備連接狀態(tài)。

  1. 調(diào)用 sendData(byte[] data)接口發(fā)送數(shù)據(jù)到 Tag。

   // 連接Tag設(shè)備,返回值為是否連接成功
   boolean connSuccess = mifareClassicTag.connectTag();

    
   // 查詢Tag連接狀態(tài)
   boolean isConnected = mifareClassicTag.isTagConnected();

    
   // 發(fā)送數(shù)據(jù)到Tag,返回值為Tag的響應(yīng)數(shù)據(jù)
   byte[] data = {0x13, 0x59, 0x22};
   byte[] response = mifareClassicTag.sendData(data);

訪問 MifareUltralight 卡片

  1. 調(diào)用 getTagInfo() 接口獲取 TagInfo 對象。

  1. 調(diào)用 connectTag() 接口連接 Tag 設(shè)備。

  1. 調(diào)用 isTagConnected() 接口查詢 Tag 設(shè)備連接狀態(tài)。

  1. 調(diào)用 sendData(byte[] data) 接口發(fā)送數(shù)據(jù)到 Tag。

   // 連接Tag設(shè)備,返回值為是否連接成功
   boolean connSuccess = mifareUltralightTag.connectTag();

    
   // 查詢Tag連接狀態(tài)
   boolean isConnected = mifareUltralightTag.isTagConnected();

    
   // 發(fā)送數(shù)據(jù)到Tag,返回值為Tag的響應(yīng)數(shù)據(jù)
   byte[] data = {0x13, 0x59, 0x22};
   byte[] response = mifareUltralightTag.sendData(data);
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號