本文實例為大家分享了uni-app實現(xiàn)NFC讀取功能的具體代碼,供大家參考,具體內(nèi)容如下
好久沒有寫博客了,今天難得有空重新記錄自己學(xué)習(xí)的點點滴滴。愛掏網(wǎng) - it200.com
1、NFC方法.js
// 包路徑 const package_NdefRecord = "android.nfc.NdefRecord"; const package_NdefMessage = "android.nfc.NdefMessage"; const package_TECH_DISCOVERED = "android.nfc.action.TECH_DISCOVERED"; const package_Intent = "android.content.Intent"; const package_Activity = "android.app.Activity"; const package_PendingIntent = "android.app.PendingIntent"; const package_IntentFilter = "android.content.IntentFilter"; const package_NfcAdapter = "android.nfc.NfcAdapter"; const package_Ndef = "android.nfc.tech.Ndef"; const package_NdefFormatable = "android.nfc.tech.NdefFormatable"; const package_Parcelable = "android.os.Parcelable"; const package_String = "java.lang.String"; let NfcAdapter; let NdefRecord; let NdefMessage; let readyRead = true; //開啟讀 let nOnFC= false; let techListsArray = [ ["android.nfc.tech.IsoDep"], ["android.nfc.tech.NfcA"], ["android.nfc.tech.NfcB"], ["android.nfc.tech.NfcF"], ["android.nfc.tech.Nfcf"], ["android.nfc.tech.NfcV"], ["android.nfc.tech.NdefFormatable"], ["android.nfc.tech.MifareClassi"], ["android.nfc.tech.MifareUltralight"] ]; // 要寫入的數(shù)據(jù) let text = "{id:8888,name:nfc,stie:wangqin.com}"; let readResult = ""; export default { listenNFCStatus: function() { console.log("---------listenNFCStatus--------------") let that = this; try { let main = plus.android.runtimeMainActivity(); let Intent = plus.android.importClass("android.content.Intent"); let Activity = plus.android.importClass("android.app.Activity"); let PendingIntent = plus.android.importClass("android.app.PendingIntent"); let IntentFilter = plus.android.importClass("android.content.IntentFilter"); NfcAdapter = plus.android.importClass("android.nfc.NfcAdapter"); let nfcAdapter = NfcAdapter.getDefaultAdapter(main); if (nfcAdapter == null) { uni.showToast({ title: "設(shè)備不支持NFC!", icon: "none" }) nOnFC= true; return; } if (!nfcAdapter.isEnabled()) { uni.showToast({ title: "請在系統(tǒng)設(shè)置中先啟用NFC功能!", icon: "none" }); nOnFC= true; return; } else { nOnFC= false; } let intent = new Intent(main, main.getClass()); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); let pendingIntent = PendingIntent.getActivity(main, 0, intent, 0); let ndef = new IntentFilter("android.nfc.action.TECH_DISCOVERED"); ndef.addDataType("*/*"); let intentFiltersArray = [ndef]; //重點部分代碼 const promise = new Promise((resolve, reject) => { plus.globalEvent.addEventListener("newintent", function() { // 輪詢調(diào)用 NFC // setTimeout(that.nfcRuning(resolve), 1000); setTimeout(() => { that.nfcRuning(resolve) }, 1000); }); }) nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray); return promise } catch (e) { } }, nfcRuning: function(resolve) { // console.log("--------------nfcRuning---------------") NdefRecord = plus.android.importClass("android.nfc.NdefRecord"); NdefMessage = plus.android.importClass("android.nfc.NdefMessage"); let main = plus.android.runtimeMainActivity(); let intent = main.getIntent(); let that = this; if (package_TECH_DISCOVERED == intent.getAction()) { if (readyRead) { //這里通過read方法拿到NFC數(shù)據(jù) const id = that.read(intent); // readyRead = false; //將數(shù)據(jù)返回出去 resolve(id) } } }, read(intent) { // toast("請勿移開標(biāo)簽正在讀取數(shù)據(jù)"); let that = this; // NFC id let bytesId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); let nfc_id = that.byteArrayToHexString(bytesId); return nfc_id; }, byteArrayToHexString: function(inarray) { // converts byte arrays to string let i, j, inn; let hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]; let out = ""; for (j = 0; j>> 4) & 0x0f; out += hex[i]; i = inn & 0x0f; out += hex[i]; } return out; }, } function toast(content) { uni.showToast({ title: content, icon: "none" }) }
2、在用NFC的頁面調(diào)用方法
import testtest from "../../../../../components/hexiii-nfc/hexiii-nfc.js" methods:{ async testNFC() { //這里用異步獲取讀取到的NFC數(shù)據(jù) const nfcId = await testtest.listenNFCStatus(); //console.log(nfcId ) //以下數(shù)據(jù)是我的業(yè)務(wù)邏輯代碼,如果只要讀取NFC數(shù)據(jù)上面那一行代碼即可了。愛掏網(wǎng) - it200.com const arr = [] this.list2.forEach(e => { arr.push(e.code) }) if(!nfcId) return if ( arr.indexOf(nfcId) === -1) { uni.showToast({ icon: "none", title: "未找到對應(yīng)巡檢點!", duration: 2000 }); } else { uni.showToast({ icon: "none", title: "識別成功!", duration: 2000 }); uni.navigateTo({ url: `/pages/application/XunJianGuanLi/XunJianRenWu/KaiShiXunJian3/index?id=${this.id}&spotCode=${nfcId}&delta=${this.delta+1}`, }); } }, } NFC感應(yīng) 二維碼掃描
3、頁面效果圖
4、總結(jié)
以上就是我讀取NFC數(shù)據(jù)的實現(xiàn)了,根據(jù)用戶掃描NFC讀取的數(shù)據(jù)自動跳轉(zhuǎn)到對應(yīng)的簽到巡檢點。愛掏網(wǎng) - it200.com代碼還有待完善,請多多指導(dǎo),第一部分中NFC的方法,因為我只需要讀取代碼,所以很多多余的、不用的代碼已被我刪除了,只留下了需要的代碼。愛掏網(wǎng) - it200.com
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持編程筆記。愛掏網(wǎng) - it200.com
聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進行處理。