uni-app 安卓手机nfc读取M1卡物理卡号

发布于 1周前 作者 zlyuanteng 来自 Uni-App

uni-app 安卓手机nfc读取M1卡物理卡号

3 回复

咨询QQ 583069500


我们做幼儿园刷卡 接触过不少读卡器的解析 可以尝试下
智密科技承接安卓/IOS双端插件开发、安卓/IOS App外包开发、项目整体外包、各类硬件产品开发
我们的优势: 1、全职UI、前端、安卓、IOS、后端、硬件工程师,每个岗位都是专职开发更专业,选择智密您就拥有了一个完整的技术支持团队; 2、定制的产品无论是插件、APP、整套系统,一年内免费Bug修复; 3、定制的APP和整体项目软件著作权归客户所有,并协助软件著作权申请; 4、软件开发源头工厂,定价合理,与开发人员直接沟通,避免需求理解问题,提高开发效率; 5、软件均为自主开发,不基于网上代码进行二次开发,保障系统安全性; 6、软件源码自己开发,出现BUG能快速修复,新需求能快速实现; 7、签订开发合同,通过条款约定双方权利义务,服务和售后有保障; 8、我们的插件尽可能做到让用户UI自定义,用户改变UI之后无需联系我们修改插件,只要前端调整UI即可。
我们唯一的劣势:价格可能会比别人高 我们不提供廉价的插件和服务,服务和收费是成正比的。 我们的插件定价基本都在千元以上,插件使用成本=插件购买费用 插件集成成本 插件填坑成本 后续更新成本 在没有好的技术支持前提下,后面三项成本将远远大于插件购买费用,选择智密科技,实现双赢
经过几年积累,已拥有大量双端插件,常见功能的插件几乎都能直接试用,欢迎各位进群了解
插件沟通交流群:755910061(欢迎进群了解我们的技术支持方式及我们的技术能力) 商务QQ:57570616(这是传说中的搅屎棍,光动嘴皮子不干活的,进群最实在) 商务微信:ZhimiTec(同上…)

在uni-app中读取安卓手机NFC(近场通信)M1卡的物理卡号,你可以使用H5+的NFC模块。以下是一个基本的示例代码,展示如何在uni-app中实现这一功能。

首先,确保你的项目已经配置了NFC权限。在manifest.json中,添加NFC权限:

"plus": {
    "distribute": {
        "android": {
            "permissions": [
                "android.permission.NFC"
            ]
        }
    }
}

然后,在你的页面或组件中,使用H5+的NFC API来读取M1卡。以下是一个示例代码:

// 引入H5+扩展API
const nfc = plus.nfc;

export default {
    data() {
        return {
            cardId: ''
        };
    },
    onLoad() {
        // 注册NFC适配器状态变化事件监听器
        nfc.addEventListener('statechange', (e) => {
            if (e.newState === 'on') {
                // NFC已打开,开始注册NDEF格式监听
                nfc.registerNdefFormatListener(
                    (ndefMsg) => {
                        // 处理读取到的NDEF信息(这里我们主要关注M1卡的UID)
                        console.log('NDEF消息:', ndefMsg);
                        // 注意:M1卡的UID通常不是通过NDEF消息获取的,而是通过技术卡监听器获取
                    },
                    (e) => {
                        console.error('注册NDEF监听失败:', e.message);
                    }
                );

                // 注册技术卡监听器(如ISO14443-3A(M1卡))
                nfc.registerTechListener(
                    ['android.nfc.tech.IsoDep'],
                    (tag) => {
                        // 获取IsoDep对象,用于与M1卡通信
                        const isoDep = tag.getTech(plus.nfc.NfcTech.ISO_DEP);

                        // 读取卡片的UID(物理卡号)
                        isoDep.connect();
                        isoDep.transceive([0x00, 0xA4, 0x04, 0x00, 0x07, 0xA0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x07, 0x80]);
                        isoDep.transceive([0x00, 0xB0, 0x00, 0x00, 0x10]).then((response) => {
                            // 解析UID(这只是一个示例,实际UID的获取方式可能有所不同)
                            const uid = Array.from(response.slice(4)).map(byte => String.fromCharCode(byte & 0xFF).charCodeAt(0).toString(16).padStart(2, '0')).join('');
                            this.cardId = uid;
                            console.log('M1卡UID:', uid);
                        }).catch((error) => {
                            console.error('读取卡片UID失败:', error);
                        }).finally(() => {
                            isoDep.close();
                        });
                    },
                    (e) => {
                        console.error('注册技术卡监听失败:', e.message);
                    }
                );
            } else if (e.newState === 'off') {
                console.log('NFC已关闭');
            }
        });

        // 打开NFC适配器
        nfc.enableNFC(false, (e) => {
            if (e.code !== 0) {
                console.error('打开NFC失败:', e.message);
            } else {
                console.log('NFC已打开');
            }
        });
    }
};

注意:

  1. 上面的代码示例是基于H5+的NFC API,仅适用于5+ App(DCloud的HBuilderX生成的App)。
  2. 读取M1卡的UID通常需要特定的APDU命令,上面的命令可能需要根据实际情况调整。
  3. NFC操作涉及硬件交互,因此在实际应用中需要处理各种异常情况,如设备不支持NFC、用户拒绝权限请求等。
回到顶部