鴻蒙OS Tag讀寫

2020-09-18 14:57 更新

場景介紹

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

接口說明

類名 接口名 功能描述
TagInfo getTagId() 獲取當前 Tag 的 ID。
getTagSupportedProfiles() 獲取當前 Tag 支持的協(xié)議或技術。
isProfileSupported(int profile) 判斷 Tag 是否支持指定的協(xié)議或技術。
TagManager getTagInfo() 獲取標簽信息。
connectTag() 建立與 Tag 設備的連接。
reset() 重置與 Tag 設備的連接,同時會把寫 Tag 的超時時間恢復為默認值。
isTagConnected() 判斷與 Tag 設備是否保持連接。
setSendDataTimeout(int timeout) 設置發(fā)送數(shù)據(jù)到 Tag 的超時時間,單位是 ms。
getSendDataTimeout() 查詢發(fā)送數(shù)據(jù)到 Tag 設備的超時時間,單位是 ms。
sendData(byte[] data) 寫數(shù)據(jù)到 Tag 設備中。
checkConnected() 檢查 Tag 設備是否已連接。
getMaxSendLength() 獲取發(fā)送數(shù)據(jù)的最大長度。在發(fā)送數(shù)據(jù)到 Tag 設備時,用于查詢最大可發(fā)送數(shù)據(jù)的長度。
IsoDepTag IsoDepTag(TagInfo tagInfo) 根據(jù)分發(fā) Tag信息獲取 IsoDep 類型 Tag 標簽對象。
getHiLayerResponse() 獲取基于 NfcB 技術的 IsoDep 類型 Tag 的高層響應內容。
getHistoricalBytes() 獲取基于 NfcA 技術的 IsoDep 類型 Tag 的歷史字節(jié)內容。
NfcATag getInstance(TagInfo tagInfo) 根據(jù)分發(fā) Tag 信息獲取 NfcA 標簽對象。
getSak() 獲取 NfcA 類型 Tag 的 SAK。
getAtqa() 獲取 NfcA 類型 Tag 的 ATQA。
NfcBTag getInstance(TagInfo tagInfo) 根據(jù)分發(fā) Tag 信息獲取 NfcB 標簽對象。
getRespAppData() 獲取 NfcB 標簽對象的應用數(shù)據(jù)。
getRespProtocol() 獲取 NfcB 標簽對象的協(xié)議信息。
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) 根據(jù)分發(fā) Tag 信息獲取 MifareClassic 標簽對象。
getMifareType() 獲取 MifareClassic Tag 設備的 Mifare 類型。
getTagSize() 獲取 MifareClassic Tag 設備的尺寸。
getSectorsNum() 獲取 MifareClassic Tag 設備內所有扇區(qū)數(shù)。
getBlocksNum() 獲取 MifareClassic Tag 設備內所有塊數(shù)。
getBlocksNumForSector(int sectorId) 獲取 MifareClassic Tag 設備內一個扇區(qū)的塊數(shù)。
getSectorId(int blockId) 用塊ID獲取 MifareClassic Tag 設備內扇區(qū)號。
getFirstBlockId(int sectorId) 獲取 MifareClassic Tag 設備內特定扇區(qū)的第一個塊 ID。
authenSectorUseKey(int sectorId, byte[] key, byte keyType) 用密鑰鑒權 MifareClassic Tag 設備內特定扇區(qū)。
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 設備內特定塊的內容移動到一個內部的緩存區(qū)。
MifareUltralightTag getInstance(TagInfo tagInfo) 根據(jù)分發(fā) Tag 信息獲取 MifareUltralight 標簽對象。
getMifareType() 獲取 MifareUltralight Tag 設備類型。
readFourPages(int pageOffset) 從 MifareUltralight Tag 設備的特定頁數(shù)開始讀四頁。
writeOnePage(int pageOffset, byte[] data) 在 MifareUltralight Tag 設備的特定頁數(shù)寫數(shù)據(jù)。

讀取卡片類型

  1. 從 Intent 中獲取 TagInfo,初始化 TagInfo 實例。

  1. TagInfo 實例調用 getTagSupportedProfiles()接口查詢當前 Tag 支持的技術或協(xié)議類型。

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

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

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

    
   // 查詢Tag設備支持的技術或協(xié)議,返回值為支持的技術或協(xié)議列表
   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 卡片

  1. 調用 connectTag() 接口連接 Tag 設備。

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

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

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

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

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

訪問 NfcB 卡片

  1. 調用 connectTag() 接口連接 Tag 設備。

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

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

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

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

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

訪問 IsoDep 卡片

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

  1. 調用connectTag()接口連接Tag設備。

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

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

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

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

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

訪問Ndef卡片

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

  1. 調用 connectTag()接口連接 Tag 設備。

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

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

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

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

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

訪問 MifareClassic 卡片

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

  1. 調用 connectTag()接口連接 Tag 設備。

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

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

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

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

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

訪問 MifareUltralight 卡片

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

  1. 調用 connectTag() 接口連接 Tag 設備。

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號