玩轉NFC:HarmonyOS讓手機變身萬能貼的小技巧

6 阅读3分钟

作為一個隨時隨地用NFC刷門禁的懶癌患者,今天必須跟大家聊聊HarmonyOS的NFC有多香!從刷公交卡到模擬門禁,再到自己DIY標簽,這些玩法我親測超實用,趕緊筆記記起來~

一、NFC能做什麼?生活小幫手實錘了

第一次發現NFC的妙用,是有次趕地鐵沒帶交通卡,結果手機貼一下閘機就過去了!其實HarmonyOS的NFC有兩大絕活:

  • 讀寫標簽:像公交卡充值、圖書館借書,把手机貼近感應區就能讀取信息,甚至能自己寫入數據,比如在辦公桌上貼個NFC標簽,手機一碰就自動連公司Wi-Fi~
  • 模擬卡片:最常用的就是模擬門禁卡,再也不用擔心出門忘帶鑰匙;還能模擬銀行卡,買東西時滴一下就支付,比掏錢包快多了!

二、DIY NFC標簽:把生活變得更聰明

1. 常見標簽類型

不同標簽適合不同場景,整理了個表格方便大家對號入座:

標簽類型適用場景我怎麼用
NfcA公交卡、門禁卡模擬小區門禁,再也不找鑰匙
NDEF存文本、URL貼在筆記本上,一碰打開工作文件
MifareUltralight簡單存儲(門票、優惠券)把電影票存進手機,不怕丟票

2. 前台讀取:打開應用後刷一刷

想自己寫入數據到標簽,其實幾行代碼就夠了。比如給辦公桌貼個標簽,一碰就打開工作郵件:

// 先檢查設備支不支持NFC
if (!canIUse("SystemCapability.Communication.NFC.Core")) {
    console.log('設備不支持NFC,哭唧唧');
    return;
}

// 啟用前台讀取模式,打開應用後才能讀寫
tag.enableForegroundDispatch(() => {
    console.log('準備好讀寫NFC標簽啦');
});

// 讀取標簽數據(這裡以NfcA類型為例)
tag.getNfcA(tagInfo).then((nfcATag) => {
    nfcATag.read().then((data) => {
        console.log('讀到的數據:', data);
        // 比如讀到URL就自動打開網頁
        if (data.includes('workEmail.com')) {
            openUrl('workEmail.com');
        }
    });
});

3. 後台識別:不打開應用也能感應

更神奇的是後台模式,比如手機放包裡,經過門禁時自動感應。這需要在配置文件裡聲明能處理的卡片類型:

{
  "abilities": [
    {
      "skills": [
        {
          "actions": ["ohos.nfc.tag.action.TAG_FOUND"]
        }
      ],
      "metadata": [
        {
          "name": "payment-aid",
          "value": "A0000000031010" // 這是模擬銀行卡的ID
        }
      ]
    }
  ]
}

三、模擬卡片:手機變身萬能卡

最愛的莫過於HCE卡模擬功能,把門禁卡「復制」到手機裡:

// 先檢查設備支持HCE不
if (!cardEmulation.hasHceCapability()) {
    console.log('設備不支持卡片模擬,難過');
    return;
}

// 啟動HCE服務,聲明能處理的卡片類型
let hceService = new cardEmulation.HceService();
let aidList = ["A0000000031010"]; // 這是模擬門禁卡的ID
hceService.start(elementName, aidList);

// 當讀卡器發來命令時,返回響應數據
hceService.on('hceCmd', (cmd) => {
    // 這裡根據門禁卡的協議返回數據
    let response = [0x90, 0x00]; // 示例響應,實際要根據卡片協議修改
    hceService.transmit(response);
});

最後的碎碎念

記得剛開始學NFC時,為了模擬公司門禁卡研究了一晚上,後來發現其實關鍵就是配置好AID和協議。現在我的手機貼了好幾個自定義NFC標簽:書桌上的標簽一碰就打開辦公軟件,床頭的標簽一碰就關閉所有家電,真的超級方便!