vue、H5、移动端 读取NFC

11 篇文章 0 订阅
1 篇文章 0 订阅

拷贝走直接用

ps:测试时需在移动端测试 PC测试无效


              document.addEventListener("plusready", function() { 
                   // NFC监听
                   monitorNFC() 
    		}

            function monitorNFC(t){ 
                let NfcAdapter;
                let NdefRecord;
                let NdefMessage;
                function listenNFCStatus() {
                    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);
                        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];
                        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.MifareClassic"],
                            ["android.nfc.tech.MifareUltralight"]
                        ];
                        document.addEventListener("newintent",
                            function() {
                                console.error('newintent');
                                setTimeout(handle_nfc_data1, 1000);
                            }, false);
                        document.addEventListener("pause", function(e) {
                            if (nfcAdapter) {
                                nfcAdapter.disableForegroundDispatch(main);
                                console.log('pause');
                            }
                        }, false);
                        document.addEventListener("resume", function(e) {
                            if (nfcAdapter) {
                                console.log('resume');
                                nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
                            }
                        }, false);
                        nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
                    } catch (e) {
                        console.error(e);
                    }
                }
    
                function handle_nfc_data1() {
                    NdefRecord = plus.android.importClass("android.nfc.NdefRecord");
                    NdefMessage = plus.android.importClass("android.nfc.NdefMessage");
                    let main = plus.android.runtimeMainActivity();
                    let intent = main.getIntent();  
                    if ("android.nfc.action.TECH_DISCOVERED" == intent.getAction()) {
                        // if (readyWriteData) {
                        //     __write(intent);
                        //     readyWriteData = false;
                        // } else if (readyRead) {
                            console.log("进行读取NFC")
                            __read(intent);
                            readyRead = false;
                        // }
                    }
                } 
    
                function __read(intent) {
                    try {
                        let content = ""; 
                        waiting = plus.nativeUI.showWaiting("请勿移开标签\n正在读取数据...");
                        let tag = plus.android.importClass("android.nfc.Tag"); 
                        tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
                        let bytesId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); 
                        let rawmsgs = intent.getParcelableArrayExtra("android.nfc.extra.NDEF_MESSAGES"); 
                        let records = rawmsgs[0].getRecords(); 
                        let result = records[0].getPayload(); 
                        let s = plus.android.newObject("java.lang.String",result); 
                        console.log( s) 
                        if(s){ 
                            s = s.slice(s.indexOf('en') + 2) 
                        }
                        console.log('查询解过:'+s)  
                        // console.log("bytesId:" + (bytesId));
                        // console.log("十六进制ID:" + (bytesToHexString(tag.getId()))); 
                    } catch (e) {
                        alert(e);  
                    }
                    readyRead = false
                    waiting.close();
                }
     
                function bytesToHexString(inarray) {
                    let i, j, x;
                    let hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
                        "B", "C", "D", "E", "F"
                    ];
                    let out = "";
                    for (j = 0; j < inarray.length; ++j) {
                        x = parseInt(inarray[j]) & 0xff;
                        i = (x >> 4) & 0x0f;
                        out += hex[i];
                        i = x & 0x0f;
                        out += hex[i];
                    }
                    return out;
                } 
            }
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 28
    评论
Vue是一种用于构建用户界面的JavaScript框架,适用于各种平台,包括H5移动端。使用Vue来写H5移动端应用具有以下几个优势。 首先,Vue提供了丰富的组件库和生态系统,方便我们快速构建出符合H5移动端需求的用户界面。我们可以使用Vue的组件来封装各种常见的移动端UI元素,例如按钮、弹窗、导航栏等,以减少我们的开发时间和工作量。 其次,Vue具有响应式的数据绑定机制,能够方便地将数据和视图进行关联。在H5移动端应用中,我们常常需要根据用户的操作改变界面的显示和行为,通过Vue的数据绑定,我们可以很容易地实现这一需求,从而提升用户体验。 此外,Vue还支持组件间的通信和交互。在H5移动端应用中,各个组件之间经常需要进行数据传递和事件触发,Vue提供了一系列的机制,例如props和emit,来实现组件间的数据传递和通信,从而使得我们的应用更加灵活和可维护。 最后,Vue还有一些针对H5移动端的特性和优化。例如,Vue可以通过Webpack等打包工具将代码进行优化和压缩,减小文件大小,提高页面加载速度;另外,Vue还支持使用Vue Router进行页面路由管理,使用Vuex进行全局状态管理,来满足复杂H5应用的需求。 综上所述,Vue是一种适用于H5移动端的强大框架,它能够帮助我们快速构建出漂亮、高效的移动端应用,提升用户体验,同时还具备灵活性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Web_Lys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值