// if ('nfc' in navigator) { // console.log('设备支持NFC'); // uni.showToast({ title: '支持NFC', icon: "none" }); // } else { // uni.showToast({ title: '设备不支持NFC', icon: "none" }); // console.log('设备不支持NFC'); // } // try { // await navigator.permissions.query({ name: 'nfc' }); // this.nfcMsg = 'NFC权限已授予' // console.log('NFC权限已授予'); // } catch (error) { // this.nfcMsg = '获取NFC权限失败' // console.error('获取NFC权限失败', error); // } document.addEventListener("plusready", function () { // NFC监听 monitorNFC() }) function monitorNFC(t) { this.nfcMsg = '111' let NfcAdapter; let NdefRecord; let NdefMessage; function listenNFCStatus() { 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); 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]; 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.MifareClassic"], ["android.nfc.tech.MifareUltralight"] ]; document.addEventListener("newintent", function () { console.error('newintent'); setTimeout(handle_nfc_data1, 1000); }, false); document.addEventListener("pause", function (e) { if (nfcAdapter) { nfcAdapter.disableForegroundDispatch(main); console.log('pause'); } }, false); document.addEventListener("resume", function (e) { if (nfcAdapter) { console.log('resume'); nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray); } }, false); nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray); } catch (e) { console.error(e); } } function handle_nfc_data1() { NdefRecord = plus.android.importClass("android.nfc.NdefRecord"); NdefMessage = plus.android.importClass("android.nfc.NdefMessage"); let main = plus.android.runtimeMainActivity(); let intent = main.getIntent(); if ("android.nfc.action.TECH_DISCOVERED" == intent.getAction()) { // if (readyWriteData) { // __write(intent); // readyWriteData = false; // } else if (readyRead) { console.log("进行读取NFC") __read(intent); readyRead = false; // } } } function __read(intent) { try { let content = ""; waiting = plus.nativeUI.showWaiting("请勿移开标签\n正在读取数据..."); let tag = plus.android.importClass("android.nfc.Tag"); tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); let bytesId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); let rawmsgs = intent.getParcelableArrayExtra("android.nfc.extra.NDEF_MESSAGES"); let records = rawmsgs[0].getRecords(); let result = records[0].getPayload(); let s = plus.android.newObject("java.lang.String", result); console.log(s) if (s) { s = s.slice(s.indexOf('en') + 2) } console.log('查询解过:' + s) // console.log("bytesId:" + (bytesId)); // console.log("十六进制ID:" + (bytesToHexString(tag.getId()))); } catch (e) { alert(e); } readyRead = false waiting.close(); } function bytesToHexString(inarray) { let i, j, x; 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) { x = parseInt(inarray[j]) & 0xff; i = (x >> 4) & 0x0f; out += hex[i]; i = x & 0x0f; out += hex[i]; } return out; } }