uniapp實現(xiàn)NFC讀取功能

本文實例為大家分享了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)用方法

NFC感應(yīng)
  二維碼掃描
  


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}`,
    });
   }
  },
}

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)系我們進行處理。
發(fā)表評論
更多 網(wǎng)友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 久久se精品一区精品二区| 国产精品亚洲精品日韩已满| qvod小说区图片区亚洲| 国产成人精品免高潮在线观看| 洗澡被王总干好舒服小说| 亚洲欧美一区二区三区| 巫山27号制作视频直播| 被窝影院午夜无码国产| 亚洲国产欧美日韩一区二区三区 | 中文字幕第2页| 国产成人精品午夜福利| 无码精品黑人一区二区三区| 2021成人国产精品| 亚洲精品中文字幕乱码| 夫妻免费无码V看片| 精品国产乱码一区二区三区麻豆| 久久久精品免费| 国产午夜福利精品一区二区三区| 日韩精品视频在线播放| 五月婷婷伊人网| 亚洲伊人精品综合在合线| 国产精品爽爽影院在线| 欧美另类杂交a| 1024人成网站色| 二十四小时日本高清在线www| 国产成人国产在线观看入口| 日本高清护士xxxxx| 香蕉视频成人在线观看| 丰满肥臀风间由美357在线| 啊灬啊别停灬用力啊呻吟| 性欧美乱妇高清COME| 男生的肌肌桶女生的肌肌| 99亚洲精品视频| 亚洲图片第一页| 国产亚洲美女精品久久久2020| 扒开双腿疯狂进出爽爽爽动态图 | 欧美午夜精品久久久久免费视 | 亚洲老妈激情一区二区三区| 日本高清视频色wwwwww色| 精品视频国产狼人视频| 中文字幕在线永久视频|