uni-app 利用native调用Android NFC 读取RFID标签的UID

manifest.json 权限:
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
"<uses-permission android:name=\"android.permission.NFC\"/>",
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
nfc.vue代码如下,完全可运行:

<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>  

 

这是一个以uni-app作为用户前端,基于esp8266在arduino开发的RFID识别控制器。在此项目中主要用于电动车NFC控制.zip嵌入式优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人单片机开发经验充足,深耕嵌入式领域,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明,项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要嵌入式物联网单片机相关领域开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注嵌入式领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【建议小白】: 在所有嵌入式开发中硬件部分若不会画PCB/电路,可选择根据引脚定义将其代替为面包板+杜邦线+外设模块的方式,只需轻松简单连线,下载源码烧录进去便可轻松复刻出一样的项目 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值