只能读取 uid,无法读写扇区信息
<template>
<view>
<view class="uni-padding-wrap">
NFC
<view class="uni-common-mt" style="background:#FFF; padding:20upx;">
<text>
UID:{{ UID }}
{{ tip }}
</text>
</view>
</view>
</view>
</template>
<script>
var NfcAdapter;
export default {
data() {
return {
title: "redNFC",
UID: "",
msg: "",
tip: "",
};
},
onLoad() {
console.log("onLoad");
},
onShow() {
console.log("onShow");
this.NFCInit();
},
onHide() {
console.log("onHide");
this.NFCReadUID();
},
methods: {
NFCInit() {
try {
var main = plus.android.runtimeMainActivity();
//console.log(main);
var Intent = plus.android.importClass("android.content.Intent");
// console.log(Intent);
var Activity = plus.android.importClass("android.app.Activity");
//console.log(Activity);
var PendingIntent = plus.android.importClass(
"android.app.PendingIntent"
);
// console.log(PendingIntent);
var IntentFilter = plus.android.importClass(
"android.content.IntentFilter"
);
// console.log(IntentFilter);
// var Uri = plus.android.importClass('android.net.Uri');
// var Bundle = plus.android.importClass('android.os.Bundle');
// var Handler = plus.android.importClass('android.os.Handler');
//console.log(Handler);
NfcAdapter = plus.android.importClass("android.nfc.NfcAdapter");
//console.log(NfcAdapter);
var _nfcAdapter = NfcAdapter.getDefaultAdapter(main);
// console.log(_nfcAdapter);
var ndef = new IntentFilter("android.nfc.action.NDEF_DISCOVERED"); //NfcAdapter.ACTION_NDEF_DISCOVERED
// console.log(ndef);
var tag = new IntentFilter("android.nfc.action.TAG_DISCOVERED"); //NfcAdapter.ACTION_TECH_DISCOVERED
// console.log(tag);
var tech = new IntentFilter("android.nfc.action.TECH_DISCOVERED");
// console.log(tech);
var intentFiltersArray = [ndef, tag, tech];
var techListsArray = [
["android.nfc.tech.Ndef"],
["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"],
];
var _intent = new Intent(main, main.getClass());
// console.log(_intent);
_intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
var pendingIntent = PendingIntent.getActivity(main, 0, _intent, 0);
// console.log(pendingIntent);
if (_nfcAdapter == null) {
this.tip = "本设备不支持NFC!";
} else if (_nfcAdapter.isEnabled() == false) {
this.tip = "NFC功能未打开!";
} else {
this.tip = "NFC正常";
_nfcAdapter.enableForegroundDispatch(
main,
pendingIntent,
IntentFilter,
techListsArray
);
}
} catch (e) {
//TODO handle the exception
}
},
NFCReadUID() {
var main = plus.android.runtimeMainActivity();
var _intent = main.getIntent();
var _action = _intent.getAction();
// console.log("action type:" + _action);
if (
NfcAdapter.ACTION_NDEF_DISCOVERED == _action ||
NfcAdapter.ACTION_TAG_DISCOVERED == _action ||
NfcAdapter.ACTION_TECH_DISCOVERED == _action
) {
var Tag = plus.android.importClass("android.nfc.Tag");
var tagFromIntent = _intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
var uid = _intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
console.log(uid);
this.UID = this.Bytes2HexString(uid);
//console.log(this.UID);
}
},
//将byte[] 转为Hex,
Bytes2HexString(arrBytes) {
var str = "";
for (var i = 0; i < arrBytes.length; i++) {
var tmp;
var num = arrBytes[i];
if (num < 0) {
//Java中数值是以补码的形式存在的,应用程序展示的十进制是补码对应真值。补码的存在主要为了简化计算机底层的运算,将减法运算直接当加法来做
tmp = (255 + num + 1).toString(16);
} else {
tmp = num.toString(16);
}
if (tmp.length == 1) {
tmp = "0" + tmp;
}
str += tmp;
}
return str;
},
},
};
</script>
<style></style>