关于uni

您所在的位置:网站首页 安卓手机开启nfc功能怎么开 关于uni

关于uni

2024-07-13 00:15| 来源: 网络整理| 查看: 265

关于手机开启nfc功能 nfc功能开启,分为开启手机的nfc功能和开启app的nfc功能。 那么app端会用到的nfc功能有哪些呢? 有nfc读取身份证内容,手机读取nfc签的内容,手机更改nfc签的内容,手机写入nfc签内容。 关于nfc读取身份证内容,uni-app插件市场有相关插件,可以拿来使用。 关于手机读取nfc签的内容,手机更改nfc签的内容,手机写入nfc签内容,需要相关js文件来配合app开启nfc、读取、写入等功能,当然需要及时关闭app 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 readyWriteData = false;//开启写 let readyRead = false;//开启读 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'] ]; // 要写入的数据 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: '设备不支持NFC!', icon: 'none' }) noNFC = true; return; } if (!nfcAdapter.isEnabled()) { uni.showToast({ title: '请在系统设置中先启用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]; plus.globalEvent.addEventListener('newintent',function() { console.log('newintent running'); // 轮询调用 NFC setTimeout(that.nfcRuning(), 1000); }); plus.globalEvent.addEventListener('pause',function(e) { console.log('pause running'); if (nfcAdapter) { //关闭前台调度系统 //恢复默认状态 nfcAdapter.disableForegroundDispatch(main); } }); plus.globalEvent.addEventListener('resume',function(e) { console.log('resume running'); if (nfcAdapter) { //开启前台调度系统 // 优于所有其他NFC nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray); } }); nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray); } catch (e) { console.error(e); } }, nfcRuning: function () { 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; console.log("action type:" + intent.getAction()); console.log(package_TECH_DISCOVERED == intent.getAction()); if (package_TECH_DISCOVERED == intent.getAction()) { if (readyWriteData) { console.log("----------我在写1-------------") that.write(intent); readyWriteData = false; } else if (readyRead) { console.log("----------我在读1-------------") that.read(intent); readyRead = false; } } }, write(intent) { console.log("----------我在写-------------") try { toast('请勿移开标签 正在写入...'); console.log("text=" + text); let textBytes = plus.android.invoke(text, "getBytes"); // image/jpeg text/plain let textRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, plus.android.invoke("text/plain", "getBytes"), plus.android.invoke("", "getBytes"), textBytes); let message = new NdefMessage([textRecord]); let Ndef = plus.android.importClass('android.nfc.tech.Ndef'); let NdefFormatable = plus.android.importClass('android.nfc.tech.NdefFormatable'); let tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); let ndef = Ndef.get(tag); if (ndef != null) { // 待写入的数据长度 let size = message.toByteArray().length; ndef.connect(); if (!ndef.isWritable()) { toast('tag不允许写入!'); return; } if (ndef.getMaxSize() < size) { toast('文件大小超出容量!'); return; } ndef.writeNdefMessage(message); toast('写入数据成功!'); return; } else { let format = NdefFormatable.get(tag); if (format != null) { try { format.connect(); format.format(message); toast('格式化tag并且写入message'); return; } catch (e) { toast('格式化tag失败.'); return; } } else { toast('Tag不支持NDEF'); return; } } } catch (e) { toast('写入失败'); console.log("error=" + e); } }, read(intent) { console.log("----------我在读read-------------") toast('请勿移开标签正在读取数据'); let that = this; // NFC id let bytesId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); let nfc_id = that.byteArrayToHexString(bytesId); console.log('nfc_id:', nfc_id); let Parcelable = plus.android.importClass("android.os.Parcelable"); let rawmsgs = intent.getParcelableArrayExtra("android.nfc.extra.NDEF_MESSAGES"); //let rawmsgs = intent.getParcelableArrayExtra(); console.log("数据"+rawmsgs) if(rawmsgs != null && rawmsgs.length > 0) { let records = rawmsgs[0].getRecords(); let result = records[0].getPayload(); let data = plus.android.newObject("java.lang.String", result); toast('NFC 数据:' + data); console.log('NFC 数据:',data); readResult = data; }else{ toast('没有读取到数据'); } }, 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 < inarray.length; ++j) { inn = inarray[j] & 0xff; i = (inn >>> 4) & 0x0f; out += hex[i]; i = inn & 0x0f; out += hex[i]; } return out; }, writeData: function () { if(noNFC){ toast('请检查设备是否支持并开启 NFC 功能!'); return; } // 轮询条件 readyWriteData = true; toast('请将NFC标签靠近!'); }, readData: function () { if(noNFC){ toast('请检查设备是否支持并开启 NFC 功能!'); return; } // 轮询条件 readyRead = true; toast('请将NFC标签靠近!'); } } function toast(content){ uni.showToast({ title: content, icon: 'none' }) }

vue.vue文件 来操作 js 文件,调取 js的方法来开启读写

{{title}} wangqin1 wangqin2 // import testtest from "../../js_sdk/hexiii-nfc/hexiii-nfc.js" export default { data() { return { title: 'Hello' } }, onLoad() { }, methods: { testNFC1(){ testtest.listenNFCStatus(); }, testNFC2(){ // 调用 js 文件里面的方法 testtest.nfcRuning(); } } } .content { display: flex; flex-direction: column; align-items: center; justify-content: center; } .logo { height: 200rpx; width: 200rpx; margin-top: 200rpx; margin-left: auto; margin-right: auto; margin-bottom: 50rpx; } .text-area { display: flex; justify-content: center; } .title { font-size: 36rpx; color: #8f8f94; }

那vue文件调取js文件中的方法,如何在多个页面中开启关闭呢?可以将开启、关闭的参数存在vuex里面,当前页面使用完成后要及时关闭nfc的读取参数,置为false。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3