美文网首页
UTS 开启NFC读取模式

UTS 开启NFC读取模式

作者: 空腹无才 | 来源:发表于2024-01-03 10:49 被阅读0次

基于安卓

import NfcAdapter from 'android.nfc.NfcAdapter';
import Tag from "android.nfc.Tag"
import Ndef from "android.nfc.tech.Ndef";


let nfcAdapter : NfcAdapter | null = null;
let callbacks : ((data: string) => void) | null = null;

/**
  这里会提示 类型“ReaderCallback”不是构造函数类型。
  不用管
*/
class temps extends NfcAdapter.ReaderCallback {
    constructor() {
        super()
    }

        /**
          这里会提示     此成员不能有 "override" 修饰符,因为它的包含类 "temps" 不扩展其他类。
          不用管
      */
    override onTagDiscovered(tag : Tag) {
        const byteArray = tag!.getId();
        const result = (byteArray[0] & 0xFF) << 24 |
                     (byteArray[1] & 0xFF) << 16 |
                     (byteArray[2] & 0xFF) << 8 |
                     (byteArray[3] & 0xFF);
        
        // 调用返回值
        (callbacks as (data: string) => void)(result.toString())
        setTimeout(() => {  // 用于解决低版本安卓  enableReaderMode 无法重复启动问题
                  disableNFCReaderMode();
       }, 1000)
    }
}

export function disableNFCReaderMode() {
    // 禁用NFC读取器模式
    if(nfcAdapter !== null) {
        console.log("关闭NFC读取器模式");
        (nfcAdapter as NfcAdapter)!.disableReaderMode(UTSAndroid.getUniActivity());
        nfcAdapter = null;
    }
    
    if(callbacks !== null) {
        callbacks = null;
    }
}

export function readNFC(callback: (data: string) => void) {
    const context = UTSAndroid.getAppContext();

    nfcAdapter = NfcAdapter.getDefaultAdapter(context);
    
    try{
        callbacks = callback;
        
        (nfcAdapter as NfcAdapter)!.enableReaderMode(UTSAndroid.getUniActivity()!, new temps(), (
            NfcAdapter.FLAG_READER_NFC_A |
            NfcAdapter.FLAG_READER_NFC_B |
            NfcAdapter.FLAG_READER_NFC_F |
            NfcAdapter.FLAG_READER_NFC_V |
            NfcAdapter.FLAG_READER_NFC_BARCODE
        ), null)
        
        
        uni.showToast({
            title: "启动NFC读取器模式",
            icon: "none"
        })
    }catch(e){
        uni.showToast({
            title: "NFC启动失败",
            icon: "error"
        })
    }

}

相关文章

  • iOS11 Core NFC

    About Core NFC Core NFC支持的读取数据类型: Core NFC框架特性/要求 目前支持NFC...

  • Android NFC 读取卡片信息

    因为朋友需要个读取NFC卡片数据的功能,所以最近看了一下Android 系统下NFC 读取卡片信息的操作. NFC...

  • iOS NFC NDEF写入遇到的一个小问题

    开发语言:objective-c 问题描述: 使用 wakdev 的 NFC工具-iOS即NFC Tools 读取...

  • Android NFC读卡器,仿真卡流程学习

    学习资料: Android中NFC读取金融IC卡 感谢laocaixw大佬,找了半天NFC相关开发的博客,终于找到...

  • Android--开发NFC Flutter插件 遇到获取 ta

    在开发 NFC 插件时, 由于是在flutter的页面中, 调用读取nfc, 所以传递的 context( act...

  • Android系统级应用连续读取NFC标签实现

    在网上找了好久,发现没有能够连续读取NFC标签的方法,目前我的实现还有一定的局限性,如下: 要实现连续读取NFC标...

  • 如何监听手机NFC开启

    有一个界面,包含NFC设置,本身含有NFC状态 (1.“”开启“(蓝色), 2.“已开启”(灰色)”),如果本机N...

  • CoreNFC

    检测NFC 设备并读取里面包含的NDEF格式数据. 简述 使用CoreNFC,你能够读取(目前只能读取) 1-5种...

  • Android-NFC

    本篇博客是为了解决以下的问题: NFC是什么 NFC的原理 NFC工作模式和实用场景 NFC相比于蓝牙的优势 An...

  • NFC读卡判断卡类型

    如题,项目中会用到NFC读取卡号,并且需要获取卡的类型。这时候我们可以在获取nfc读卡的onNewIntent方法...

网友评论

      本文标题:UTS 开启NFC读取模式

      本文链接:https://www.haomeiwen.com/subject/gowmndtx.html