133 lines
5.1 KiB
JavaScript
133 lines
5.1 KiB
JavaScript
// 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;
|
|
}
|
|
} |