作為一個隨時隨地用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標簽:書桌上的標簽一碰就打開辦公軟件,床頭的標簽一碰就關閉所有家電,真的超級方便!