zoukankan      html  css  js  c++  java
  • FNScanner二维码接口openView自定义扫码Demo

    本文出自APICloud官方论坛

    FNScanner 模块是一个二维码/条形码扫描器,是 scanner 模块的优化升级版。在 iOS 平台上本模块底层集成了 Zbar 和系统自带的条形码/二维码分析库,由于 IOS 系统平台在 IOS7.0 以上才开放了二维码/条码的相关接口,所以在 IOS6 上运行时模块会调用开源库 Zbar 去读取解析二维码/条码。只有在 IOS7 以上版本才会调用系统自带扫码功能。

    模块文档地址: docs.apicloud.com/Client-API/…

    模块需要注意的地方:

    注意:使用本模块前,需在云编译页面勾选添加访问摄像头权限,若要访问相册也需沟通申请访问相册权限 。

    不能同时使用的模块:wwprint

    本模块封装了两套扫码方案:

    方案一 开发者通过调用 openScanner 接口直接打开自带默认 UI 效果的二维码/条形码扫描页面,本界面相当于打开一个 window 窗口,其界面内容不支持自定义。用户可在此界面实现功能如下: 打开关闭闪关灯 从系统相册选取二维码/条码图片进行解密操作 打开摄像头,自动对焦扫码想要解析的二维码/条码

    方案二 通过 openView 接口打开一个自定义大小的扫描区域(本区域相当于打开一个 frame)进行扫描。开发者可自行 open 一个 frame 贴在模块上,从而实现自定义扫描界面的功能。然后配合使用 setFrame、closeView、switchLight 等接口实现开关闪光灯、重设扫描界面位置大小、图片解码、字符串编码等相关功能。详情请参考模块接口参数。

    方案一我就不介绍,因为直接调取接口就能直接显示一个扫码ui界面,直接使用就可以, 楼主本帖分享的是方案一无法满足ui设计效果前提下,怎么实现ui自定义的效果;

    第一步:首先先打开openwin,然后再打开模块 ,然后延迟打开一个frm自定义一个扫码见面。大家上面看到扫码是这种思路的;

    废话不多说上部分核心源码

    var FNScanner, eHeader, headerH;
        apiready = function() {
            //应用全局FNScanner模块
            FNScanner = api.require('FNScanner');
            //定义根据id获取dom
            eHeader = $api.byId('header');
            //设置头部沉浸式
            $api.fixStatusBar(eHeader);
            //获取头部高度
            headerH = $api.offset(eHeader).h;
    
            //监听应用回到前台
            api.addEventListener({
                name: 'resume'
            }, function(ret, err) {
                FNScanner.onResume();
            });
    
            //监听应用回到后台
            api.addEventListener({
                name: 'pause'
            }, function(ret, err) {
                FNScanner.onPause();
            });
           
            fnOpenFNScanner();
        }
    
        function fnOpenFNScanner() {
            // 打开扫码模块
            FNScanner.openView({
                //autorotation: true,
                fixedOn: api.frameName,
                rect: {
                    x: 0,
                    y: headerH,
                    w: api.frameWidth,
                    h: api.frameHeight
                }
            }, function(ret, err) {
                if (ret) {
                    if (ret.eventType == 'success' && ret.content != '') {
                        // 扫码成功执行函数操作传值
                        fnOpenCouple(ret.content);
                        return;
                    }
                    if (ret.eventType == 'cameraError') {
                        api.toast({
                            msg: '请开启app访问手机摄像头权限',
                            duration: 2000,
                            location: 'bottom'
                        });
                        setTimeout(function() {
                            // 关闭扫码器  关闭扫码界面
                            back();
                        }, 300);
                        return;
                    }
                    if (ret.eventType == 'albumError') {
                        api.toast({
                            msg: '请开启app访问手机相册权限',
                            duration: 2000,
                            location: 'bottom'
                        });
                        setTimeout(function() {
                            back();
                        }, 300);
                        return;
                    }
                    if (ret.eventType == 'fail') {
                        api.toast({
                            msg: '扫码失败,请从新扫码',
                            duration: 2000,
                            location: 'bottom'
                        });
                        setTimeout(function() {
                            back();
                        }, 300);
                        return;
                    }
                } else {
                    api.toast({
                        msg: '扫码错误请稍后再试',
                        duration: 2000,
                        location: 'bottom'
                    });
                    setTimeout(function() {
                        back();
                    }, 300);
                }
            });
            setTimeout(function() {
                // 打开扫码动画frm页面
                api.openFrame({
                    name: 'add_frm',
                    url: './add_frm.html',
                    rect: {
                        marginTop: headerH,
                        marginLeft: 0,
                        marginRight: 0,
                        marginBottom: 0
                    },
                    bgColor: 'rgba(0,0,0,0)',
                });
            }, 300);
        }
    
        //返回
        function back() {
            // 关闭win页面
            api.closeWin();
            // 关闭扫码模块
            FNScanner.closeView();
        }
    
        //打开最后扫码得出的数值
        function fnOpenCouple(content) {
            console.warn(content);
            back(); //建议打开下一页我这块只是为了方便直接调用返回按钮   扫码成功之后必须关闭扫码模块  不然会出现多次扫码情况
        }
    
        var isSOff = true;
        // 打开闪光灯
        function fnOpenLamp() {
            if (isSOff) {
                FNScanner.switchLight({
                    status: 'on'
                });
                isSOff = false;
            } else {
                FNScanner.switchLight({
                    status: 'off'
                });
                isSOff = true;
            }
        }
    复制代码
    
  • 相关阅读:
    迭代器模式-Iterator
    kubernetes之一 k8s基本概念
    多线程中的异常处理
    MySQL高可用集群方案
    RabbitMQ的集群模式
    多线程中如何取消任务
    公钥、私钥、摘要、数字签名、证书
    将Ubuntu系统迁移到SSD固态操作
    Java线程的状态和状态转换
    Ubuntu18.04系统和软件安装记录
  • 原文地址:https://www.cnblogs.com/APICloud/p/11465055.html
Copyright © 2011-2022 走看看