uniapp+vue2開(kāi)發(fā)微信小程序NFC識(shí)別標(biāo)簽

應(yīng)用場(chǎng)景如下圖:


在NFC按鈕可能在被頻繁開(kāi)啟的情況下,NFC會(huì)出現(xiàn)標(biāo)簽靠近一次悠菜,會(huì)觸發(fā)N次重復(fù)識(shí)別的情況舰攒,咱上代碼,閉坑悔醋。

demo布局:

<template>

????<view class="content">

????????<view class="uid-list">

????????????????<view class="item" v-for="(item,index) in uid" :key="index">

????????????????????<text>{{item.code}}</text>

????????????????????<text @tap="remove(item.code)">刪除</text>

? ? ? ?</view>

????????</view>

????????<view class="btn-group">

????????????<button @tap="startNFC" v-if="!openNFC">開(kāi)始NFC監(jiān)聽(tīng)</button>

????????????<button @tap="stopNFC" v-else>停止NFC監(jiān)聽(tīng)</button>

? ? ?????</view>

????</view>

</template>

js內(nèi)容:

<script>

let vm

let NFC

export default {

????data() {

????????return {

????????????uid: [],

????????????openNFC: false

????????}

????},

????onShow() {

????????vm = this

????},

????onUnload() {

????????vm.stopNFC()

????},

????methods: {

????????// 開(kāi)始監(jiān)聽(tīng)NFC

????????startNFC() {

????????????//不支持ios平臺(tái)

????????????if (uni.getSystemInfoSync().platform == 'ios') {

????????????????uni.showToast({

????????????????title: '不支持IOS設(shè)備',

????????????????????icon: 'none'

????????????????})

????????????????return

????????????}

????????????NFC = wx.getNFCAdapter()

????????????// 開(kāi)始監(jiān)聽(tīng)

????????????NFC.startDiscovery({

????????????????success() {

????????????????????vm.openNFC = true

????????????????????// 綁定監(jiān)聽(tīng) NFC Tag

????????????????????NFC.onDiscovered(vm.onDiscoveredCallBack)

????????????????},

????????????????fail(err) {

????????????????????if (err.errCode === 13000) {

????????????????????uni.showToast({

????????????????????????title: '當(dāng)前設(shè)備不支持NFC功能',

????????????????????????icon: 'none'

????????????????????})

????????????????} else if (err.errCode === 13001) {

????????????????????uni.showToast({

????????????????????????title: '請(qǐng)?jiān)谠O(shè)備上開(kāi)啟NFC功能',

????????????????????????icon: 'none'

????????????????????})

????????????????} else {

? ? ? ? ? ? ? ? ? ?vm.openNFC = false

???????????????????console.log('未建立NFC功能監(jiān)聽(tīng):', err)

????????????????}

????????????}

????????})

????},

????// onDiscovered回調(diào)函數(shù)

????onDiscoveredCallBack(res) {

????????vm.serializeUID(res)

????},

????// 拼裝UID

????serializeUID(res) {

????????// 回調(diào)函數(shù)中res有3個(gè)屬性芒率,id,techs,messages,因?yàn)槲覀円@取NFC Tag,所以只處理id

????????// 返回的id屬性值是一個(gè)ArrayBuffer類型

????????// 使用 new Uint8Array處理返回一個(gè)數(shù)組

????????const data = new Uint8Array(res.id)

????????let str = []

????????data.forEach(e => {

????????????// 因?yàn)槲覀兊目ㄌ?hào)是16位制的,所以這里選擇轉(zhuǎn)換成16位數(shù)字

????????????let item = e.toString(16)

????????????if (item.length == 1) {

????????????????item = '0' + item

????????????}

????????????// 因?yàn)槲覀冃枰氖谴髮?xiě)篙顺,所以要轉(zhuǎn)

????????????item = item.toUpperCase()

????????????str.push(item)

????????})

????????// 最終結(jié)果

????????const code = str.join('')

????????const has = vm.uid.some(item => item.code == code)

????????if (!has) {

????????????vm.uid.push({

????????????????code

????????????})

????????} else {

????????????uni.showToast({

????????????????title: '重復(fù)添加',

????????????????icon: 'none'

????????????})

????????}

????},

????????// 停止監(jiān)聽(tīng)

????????stopNFC() {

????????????// 取消監(jiān)聽(tīng) NFC Tag

????????????NFC.offDiscovered(vm.onDiscoveredCallBack)

????????????// 停止監(jiān)聽(tīng)貼卡

????????????NFC.stopDiscovery()

????????????// 重置 NFC 實(shí)例

????????????NFC = null

????????????//NFC按鈕開(kāi)關(guān)

????????????vm.openNFC = false

????????},

????????// 移除

????????remove(code) {

????????????this.uid = this.uid.filter(item => item.code != code)

????????},

????}

}

</script>

demo的css:

<style lang="scss">

.content {

????margin: 25rpx;

}

.uid-list {

????display: flex;

????flex-direction: column;

????align-items: center;

????justify-content: center;

????margin: 0 0 20rpx;

????.item {

????????display: flex;

????????flex-direction: row;

????????align-items: center;

????????justify-content: space-between;

????????margin: 20rpx 0;

????????padding: 20rpx;

????????border: 1rpx solid #ccc;

????????border-radius: 10rpx;

????????width: 100%;

????????box-sizing: border-box;

????}

}

.num {

????padding: 20rpx 0;

}

.btn-group {

????//浮動(dòng)到底部

????position: fixed;

????bottom: 50rpx;

????left: 0;

????right: 0;

????padding: 20rpx 100rpx;

}

</style>


坑點(diǎn):onDiscovered的回調(diào)一定要另外寫(xiě)一個(gè),具體參照上述代碼充择,不能直接這樣寫(xiě)

onDiscovered(res => {

? ? //TODO

})

一旦這樣寫(xiě)了德玫,offDiscovered就無(wú)法銷(xiāo)毀onDiscovered,在多次點(diǎn)擊開(kāi)關(guān)后椎麦,標(biāo)簽會(huì)出發(fā)多次宰僧,產(chǎn)生BUG,切記观挎,切記琴儿,切記段化;

以上就是今天的分享,希望能幫到各位道友造成,如有異議显熏,以你為準(zhǔn);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晒屎,一起剝皮案震驚了整個(gè)濱河市喘蟆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鼓鲁,老刑警劉巖蕴轨,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異骇吭,居然都是意外死亡橙弱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)燥狰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)棘脐,“玉大人,你說(shuō)我怎么就攤上這事碾局【2校” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵净当,是天一觀的道長(zhǎng)内斯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)像啼,這世上最難降的妖魔是什么俘闯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮忽冻,結(jié)果婚禮上真朗,老公的妹妹穿的比我還像新娘。我一直安慰自己僧诚,他們只是感情好遮婶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著湖笨,像睡著了一般旗扑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上慈省,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天臀防,我揣著相機(jī)與錄音,去河邊找鬼。 笑死袱衷,一個(gè)胖子當(dāng)著我的面吹牛捎废,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播致燥,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼登疗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了篡悟?” 一聲冷哼從身側(cè)響起谜叹,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搬葬,沒(méi)想到半個(gè)月后荷腊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡急凰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年女仰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抡锈。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疾忍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出床三,到底是詐尸還是另有隱情一罩,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布撇簿,位于F島的核電站聂渊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏四瘫。R本人自食惡果不足惜汉嗽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望找蜜。 院中可真熱鬧饼暑,春花似錦、人聲如沸洗做。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)诚纸。三九已至邪码,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咬清,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旧烧,地道東北人影钉。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像掘剪,于是被迫代替她去往敵國(guó)和親平委。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容