本文出自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;
}
}
复制代码

FNScanner二维码接口openView自定义扫码Demo的更多相关文章

  1. uni-app 自定义扫码界面

    二维码扫描,已经成为当下一款应用不可或缺,同时也是用户习以为常的功能了.uni-app 为我们提供了扫码 API ,直接调用即可. 需求场景 在实际开发中,平台提供的默认扫码界面,并不能满足一些自定义 ...

  2. C 二维数组,以及自定义二维数组

    C 二维数组,以及自定义二维数组 我们通常情况下是这样定义一个二维数组的: int a[10][15]; 我们分别查看一下a,a[0],*a 都是一样的值吧 我们可以这么理解: a是一个数组的数组 a ...

  3. 超简单集成HMS Scan Kit扫码SDK,轻松实现扫码购

    前言   在前面的文章中,我们向大家介绍了HMS Scan Kit 的快速集成方法以及HMS Scan Kit和其他开源扫码工具的竞争力对比分析,如果没有看到也没关系,文章下方的往期链接中有文章入口. ...

  4. java容器二:List接口实现类源码分析

    一.ArrayList 1.存储结构 动态数组elementData transient Object[] elementData; 除此之外还有一些数据 //默认初始容量 private stati ...

  5. C++传递二维数字给一个自定义函数

    如果参数是多维数组,那么参数必须指明第一维意外得所有未得长度:比如你的 void tt(char a[][20])或者 void tt(char (*a)[20]) 另外这样也是可以的char *a[ ...

  6. SpringCloud微服务实战——搭建企业级开发框架(四十一):扩展JustAuth+SpringSecurity+Vue实现多租户系统微信扫码、钉钉扫码等第三方登录

      前面我们详细介绍了SSO.OAuth2的定义和实现原理,也举例说明了如何在微服务框架中使用spring-security-oauth2实现单点登录授权服务器和单点登录客户端.目前很多平台都提供了单 ...

  7. 微信公众号 扫码支付 模式二 demo

    扫码支付 本文附有代码,在下方,如果不熟悉场景的可以看看下面的场景介绍 场景介绍 官网介绍地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?ch ...

  8. Android扫码二维码、美女瀑布流、知乎网易音乐、动画源码等

    Android精选源码 QRCode 扫描二维码.扫描条形码.相册获取图片后识别.生...   一个简洁好看的loading弹窗   Android用瀑布流展示美女图片源码   Android知乎阅读 ...

  9. 网页授权——扫二维码获取openid

    最近做微信公众平台开发项目时遇到这样一个功能需求:生成一个特定url的二维码,用户扫描二维码后跳转到这个url指定的页面,并在这个页面获得用户的openid.这个功能主要涉及到两方面的技术:生成二维码 ...

随机推荐

  1. Codeforces Round #177 (Div. 1 + Div. 2)

    A. Polo the Penguin and Segments 模拟. B. Polo the Penguin and Matrix 每个数字模d余数必须一样. 枚举结果,可计算操作次数,取最小. ...

  2. springmvc web.xml和application.xml配置详情(附:完整版pom.xml)

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="htt ...

  3. java 文件过滤器 java.io.FilenameFilter

    File 类里有方法: String[] list(FilenameFilter filter)    返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录. File ...

  4. MSBuild 常用参数

    本文告诉大家在 MSBuild 里面常用的参数 一般的 msbuild 在编译的时候都会添加很多参数,用法如下 进入对应编译的 sln 或 csproj 文件所在的文件夹,执行下面命名 msbuild ...

  5. HTML常用布局

    一般的局部布局无非采用如下的技术: 1)div + ul(ol)-li:用于分类导航或菜单等场合     2)div + dl-dt-dd:用于图文混编场合     3)table-tr-td:用于图 ...

  6. 有状态无状态回话bean

    1.有状态(Stateful) 可以在不同的方法调用间保持针对各个客户端的状态 与客户端的联系必须被维持,这样做开销要大一些 有状态也可以这样理解,它存在存储能力,也就是说至少有一个属性来标识它目前的 ...

  7. 【codeforces 750C】New Year and Rating

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. onload事件属性,JQ中的load,ready方法

    onload事件属性,JQ中的load,ready方法 前言 页面中的很多操作,需要我们在所需资源下载完成后,才可以进行操作,而资源没有及时下载,我们进行操作的话,是会报错.因此我们需要熟练掌握哪些事 ...

  9. JavaScript实现版本号比较

    /* * JavaScript实现版本号比较 * 传入两个字符串,当前版本号:curV:比较版本号:reqV * 调用方法举例:Version('5.12.3','5.12.2'),将返回true * ...

  10. js算法(1)

    数组排序 arr.sort(function compare(a,b){return b.value-a.value}); json 排序 $.getJSON('URl',function(data) ...