Files
r-util-js/packages/uni-app/src/nfc/weixin.js
T
2026-05-28 11:30:35 +08:00

87 lines
1.9 KiB
JavaScript

export async function startNfcScan() {
const nfcAdapter = wx.getNFCAdapter();
await nfcAdapter.startDiscovery();
return new Promise((resolve, reject) => {
try {
nfcAdapter.onDiscovered((res) => {
console.log("onDiscovered", res);
const arr = Array.from(new Int8Array(res.id));
resolve(arr);
});
} catch (e) {
reject(e);
}
});
}
export class WeixinNfcUtil {
nfcAdapter = null;
discoveredListenerList = [];
/**
* @type {Function}
*/
_discoveredHandler = null;
constructor() {
this.nfcAdapter = wx.getNFCAdapter();
this._discoveredHandler = this.discoveredHandler.bind(this);
this.nfcAdapter.onDiscovered(this._discoveredHandler);
}
/**
* 是否开启NFC
* NOTE 微信无法判断是否开启
* @returns {boolean} true 已开启
*/
static async isNfcEnabled() {
try {
wx.getNFCAdapter();
return true;
} catch (e) {
console.error(e);
return false;
}
}
discoveredHandler(res) {
console.log("onDiscovered", res);
const arr = Array.from(new Int8Array(res.id));
this.discoveredListenerList.forEach((cb) => {
cb(arr);
});
}
/**
*
* @param {Function} cb
*/
addDiscoveredListener(cb) {
this.discoveredListenerList.push(cb);
}
async startNfcScan() {
return await this.nfcAdapter.startDiscovery();
}
async stopNfcScan() {
this.nfcAdapter.offDiscovered(this._discoveredHandler);
return await this.nfcAdapter.stopDiscovery();
}
static async scan() {
const weixinNfcUtil = new WeixinNfcUtil();
return await new Promise((resolve, reject) => {
weixinNfcUtil
.startNfcScan()
.then(() => {
weixinNfcUtil.addDiscoveredListener((res) => {
weixinNfcUtil.stopNfcScan();
resolve(res);
});
})
.catch(reject);
});
}
}