FNScanner

open openView closeView encodeImg onResume

论坛示例

为帮助用户更好更快的使用模块,论坛维护了一个示例,示例中包含示例代码、知识点讲解、注意事项等,供您参考。

模块概述

FNScanner 模块是一个二维码/条形码扫描器,是 scanner 模块的优化升级版。在 iOS 平台上本模块底层集成了系统自带扫码功能。

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

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

方案一

开发者通过调用 openScanner 接口直接打开自带默认 UI 效果的二维码/条形码扫描页面,本界面相当于打开一个 window 窗口,其界面内容不支持自定义。用户可在此界面实现功能如下:

  1. 打开关闭闪关灯

  2. 从系统相册选取二维码/条码图片进行解密操作

  3. 打开摄像头,自动对焦扫码想要解析的二维码/条码

方案二

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

该模块源码已开源,地址:

注意:

在android 平台上,打开扫码模块后app切入后台再次回到前台时,扫码界面会有黑屏问题,需要开发者调用onPause、onResume接口自行处理,参考接口详情。

open

打开自带默认 UI 效果的二维码/条形码扫描页面,本界面相当于打开一个 window 窗口,其界面内容不支持自定义

open({params}, callback(ret))

params

sound:

  • 类型:字符串
  • 描述:(可选项)扫描结束后的提示音文件路径,要求本地路径(fs://、widget://),为保证兼容性,推荐使用 wav 格式的短音频文件

autorotation:

  • 类型:布尔
  • 描述:(可选项)扫描页面是否自动旋转(横竖屏)
  • 默认值:false

saveToAlbum:

  • 类型:布尔
  • 描述:(可选项)扫描的二维码/条形码图片是否自动保存到相册
  • 默认值:false

verticalLineColor:

  • 类型:字符串
  • 描述:(可选项) 字符串类型;竖屏时扫描线的颜色,支持支持rgb、rgba、#;
  • 默认值:模块自带图片颜色

landscapeLineColor:

  • 类型:字符串
  • 描述:(可选项) 字符串类型;横屏时扫描线的颜色,支持支持rgb、rgba、#; (android不支持,android的横竖屏是一个颜色)
  • 默认值:模块自带图片颜色

hintText:

  • 类型:字符串
  • 描述:(可选项) 字符串类型;二维码/条形码界面扫码界面底下的文字
  • 默认值:’对准条形码/二维码,即可自动扫描’

albumText:

  • 类型:字符串
  • 描述:(可选项) 相册按钮文字
  • 默认值:’相册’

lightText:

  • 类型:字符串
  • 描述:(可选项) 灯光开启文字
  • 默认值:’轻触照亮’

closeText:

  • 类型:字符串
  • 描述:(可选项) 灯光关闭文字
  • 默认值:’轻触关闭’

isAlbum:

  • 类型:布尔
  • 描述:(可选项) 是否隐藏相册按钮
  • 默认值:false

isLight:

  • 类型:布尔
  • 描述:(可选项) 是否隐藏闪光灯按钮
  • 默认值:false

isPush:

  • 类型:布尔
  • 描述:(可选项) 页面跳转是否改为push,本参数仅支持iOS
  • 默认值:false

font:

  • 类型:JSON 对象
  • 描述:(可选项)文字样式
  • 内部字段:

saveImg:

  • 类型:JSON 对象
  • 描述:(可选项)扫描的二维码/条形码图片保存所需要的参数,若不传则不保存
  • 内部字段:
  1. path: 'fs://a.jpg', //字符串类型;保存的文件路径;若路径不存在,则创建此路径,只支持fs://协议
  2. w: 200, //(可选项)数字类型;生成图片的宽度,默认:200
  3. h: 200 //(可选项)数字类型;生成图片的高度,默认:200
  4. }

isDrawQRCodeRect:

  • 类型:布尔
  • 描述:(可选项) 是否开启二维码自动对焦
  • 默认值:false

qRCodeRectWidth:

  • 类型:数字
  • 描述:(可选项) 二维码自动对焦框宽度 (android不支持)
  • 默认值:1

qRCodeRectColor:

  • 类型:字符
  • 描述:(可选项) 二维码自动对焦框颜色,支持 rgb、rgba、#; (android不支持)
  • 默认值:’#90EE90’

isGBK:

  • 类型:布尔
  • 描述:(可选项) 是否GBK编码,如出现中文乱码,可能是用GBK编码带中文的数据生成二维码导致,此时就需要设置为true,此参数仅支持iOS,此参数在1.1.9(包含)版本以后弃用,请使用encoding参数
  • 默认值:false

encoding:

  • 类型:数字类型
  • 描述:(可选项) 编码类型
  • 默认值:0
  • 取值范围:
    • 0:auto
    • 1:utf8
    • 2:gbk

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. eventType: 'cancel', //字符串类型;扫码事件类型
  3. //取值范围:
  4. //show(模块显示)
  5. //cameraError(访问摄像头失败)
  6. //albumError(访问相册失败)
  7. //cancel(用户取消扫码)
  8. //selectImage(用户从系统相册选取二维码图片)
  9. //cancelImage(用户取消从系统相册选取二维码图片,仅支持iOS)
  10. //success(识别二维码/条码图片成功)
  11. //fail(扫码失败)
  12. imgPath: '', //字符串类型;需要保存的二维码图片绝对路径(自定义路径)
  13. albumPath: '', //字符串类型;需要保存的二维码图片绝对路径(相册路径)
  14. content: '' //扫描的二维码/条形码信息
  15. }

示例代码

  1. var FNScanner = api.require('FNScanner');
  2. FNScanner.open({
  3. autorotation: true
  4. }, function(ret, err) {
  5. if (ret) {
  6. alert(JSON.stringify(ret));
  7. } else {
  8. alert(JSON.stringify(err));
  9. }
  10. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

openScanner

openScanner({params}, callback(ret))

params

sound:

  • 类型:字符串

autorotation:

  • 类型:布尔
  • 描述:(可选项)扫描页面是否自动旋转(横竖屏)
  • 默认值:false

saveToAlbum:

  • 类型:布尔
  • 描述:(可选项)扫描的二维码/条形码图片是否自动保存到相册
  • 默认值:false

verticalLineColor:

  • 类型:字符串
  • 描述:(可选项) 字符串类型;竖屏时扫描线的颜色,支持支持rgb、rgba、#;仅android有效
  • 默认值:模块自带图片颜色

saveImg:

  • 类型:JSON 对象
  • 描述:(可选项)扫描的二维码/条形码图片保存所需要的参数,若不传则不保存
  • 内部字段:
  1. {
  2. path: 'fs://a.jpg', //字符串类型;保存的文件路径;若路径不存在,则创建此路径,只支持fs://协议
  3. w: 200, //(可选项)数字类型;生成图片的宽度,默认:200
  4. h: 200 //(可选项)数字类型;生成图片的高度,默认:200
  5. }

hintText:

  • 类型:字符串
  • 描述:(可选项) 字符串类型;二维码/条形码界面扫码界面底下的文字(ios不支持)
  • 默认值:’对准条形码/二维码,即可自动扫描’

font:

  • 类型:JSON 对象
  • 描述:(可选项)文字样式
  • 内部字段:
  1. {
  2. hintText:{
  3. size:16, //数字类型,二维码/条形码界面扫码界面底下的文字大小
  4. color: '', //字符串类型;二维码/条形码界面扫码界面底下的文字颜色,支持#、rgb、rgba;默认:#FFFFFF
  5. }
  6. }

isAlbum:

  • 类型:布尔
  • 描述:(可选项) 是否隐藏相册按钮
  • 默认值:false

isPush:

  • 类型:布尔
  • 描述:(可选项) 页面跳转是否改为push,本参数仅支持iOS
  • 默认值:false

isDrawQRCodeRect:

  • 类型:布尔
  • 描述:(可选项) 是否开启二维码自动对焦
  • 默认值:false

qRCodeRectWidth:

  • 类型:数字
  • 描述:(可选项) 二维码自动对焦框宽度 (android不支持)
  • 默认值:1

qRCodeRectColor:

  • 类型:字符
  • 描述:(可选项) 二维码自动对焦框颜色,支持 rgb、rgba、#; (android不支持)
  • 默认值:’#90EE90’

isLight:

  • 类型:布尔
  • 描述:(可选项) 是否隐藏闪光灯按钮
  • 默认值:false

isGBK:

  • 类型:布尔
  • 描述:(可选项) 是否GBK编码,如出现中文乱码,可能是用GBK编码带中文的数据生成二维码导致,此时就需要设置为true,此参数仅支持iOS,此参数在1.1.9(包含)版本以后弃用,请使用encoding参数
  • 默认值:false

encoding:

  • 类型:数字类型
  • 描述:(可选项) 编码类型
  • 默认值:0
  • 取值范围:
    • 0:auto
    • 1:utf8
    • 2:gbk

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. eventType: 'cancel', //字符串类型;扫码事件类型
  3. //取值范围:
  4. //show(模块显示)
  5. //cameraError(访问摄像头失败)
  6. //albumError(访问相册失败)
  7. //cancel(用户取消扫码)
  8. //selectImage(用户从系统相册选取二维码图片)
  9. //success(识别二维码/条码图片成功)
  10. //fail(扫码失败)
  11. imgPath: '', //字符串类型;需要保存的二维码图片绝对路径(自定义路径)
  12. albumPath: '', //字符串类型;需要保存的二维码图片绝对路径(相册路径)
  13. content: '' //扫描的二维码/条形码信息
  14. }

示例代码

  1. var FNScanner = api.require('FNScanner');
  2. FNScanner.openScanner({
  3. autorotation: true
  4. }, function(ret, err) {
  5. alert(JSON.stringify(ret));
  6. } else {
  7. alert(JSON.stringify(err));
  8. }
  9. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

openView

打开可自定义的二维码/条形码扫描器 【注】:该接口需要在apiready中做生命周期处理,详情见接口onpause,onresume

openView({params}, callback(ret))

params

rect:

  • 类型:JSON 对象
  • 描述:(可选项)扫描器的位置及尺寸,在安卓平台宽高比须跟屏幕宽高比一致,否则摄像头可视区域的图像可能出现少许变形;w和h属性最好使用api.winWidth和api.winHeight,这样不会导致变形,也不会出现手机必须要在一定的距离上才能扫描出来的现象
  • 内部字段:

rectOfInterest:

  • 类型:JSON 对象
  • 描述:(可选项)在扫码区域上的扫码识别区域,仅在iOS平台有效
  • 内部字段:
  1. {
  2. x: 0, //(可选项)数字类型;扫码识别区域左上角的 x 坐标(相对于扫码区rect);默认:0
  3. y: 0, //(可选项)数字类型;扫码识别区域左上角的 y 坐标(相对于扫码区rect);默认:0
  4. w: 320, //(可选项)数字类型;扫码识别区域的宽度;默认:扫码区rect的宽度
  5. h: 480 //(可选项)数字类型;扫码识别区域的高度;默认:扫码区rect的高度
  6. }

sound:

  • 类型:字符串
  • 描述:(可选项)扫描结束后的提示音文件路径,要求本地路径(fs://、widget://),为保证兼容性,推荐使用 wav 格式的短音频文件

autorotation:

  • 类型:布尔
  • 描述:(可选项)扫描页面是否自动旋转(横竖屏)
  • 默认值:false

saveToAlbum:

  • 类型:布尔
  • 描述:(可选项)扫描的二维码/条形码图片是否自动保存到相册
  • 默认值:false

saveImg:

  • 类型:JSON 对象
  • 描述:(可选项)扫描的二维码/条形码图片保存所需要的参数,若不传则不保存
  • 内部字段:
  1. {
  2. path: 'fs://a.jpg', //字符串类型;保存的文件路径;若路径不存在,则创建此路径,只支持 fs:// 协议
  3. w: 200, //(可选项)数字类型;生成图片的宽度,默认:200
  4. h: 200 //(可选项)数字类型;生成图片的高度,默认:200
  5. }

interval:

  • 类型:数字
  • 描述:(可选项)连续扫描间隔;
  • 默认值:3

isDrawQRCodeRect:

  • 类型:布尔
  • 描述:(可选项) 是否开启二维码自动对焦
  • 默认值:false

qRCodeRectWidth:

  • 类型:数字
  • 描述:(可选项) 二维码自动对焦框宽度 (android不支持)
  • 默认值:1

qRCodeRectColor:

  • 类型:字符
  • 描述:(可选项) 二维码自动对焦框颜色,支持 rgb、rgba、#; (android不支持)
  • 默认值:’#90EE90’

isGBK:

  • 类型:布尔
  • 描述:(可选项) 是否GBK编码,如出现中文乱码,可能是用GBK编码带中文的数据生成二维码导致,此时就需要设置为true,此参数仅支持iOS,此参数在1.1.9(包含)版本以后弃用,请使用encoding参数
  • 默认值:false

encoding:

  • 类型:数字类型
  • 描述:(可选项) 编码类型
  • 默认值:0
  • 取值范围:
    • 0:auto
    • 1:utf8
    • 2:gbk

fixedOn:

  • 类型:字符串类型
  • 描述:(可选项)模块视图添加到指定 frame 的名字(只指 frame,传 window 无效)
  • 默认:模块依附于当前 window

fixed:

  • 类型:布尔
  • 描述:(可选项)模块是否随所属 window 或 frame 滚动
  • 默认值:true(不随之滚动)

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. eventType: 'success', //字符串类型;扫码事件类型
  2. //取值范围:
  3. //show(模块显示)
  4. //cameraError(访问摄像头失败)
  5. //albumError(访问相册失败)
  6. //success(扫码成功)
  7. //fail(扫码失败)
  8. imgPath: '', //字符串类型;需要保存的二维码图片绝对路径(自定义路径)
  9. albumPath: '', //字符串类型;需要保存的二维码图片绝对路径(相册路径)
  10. content: '' //扫描的二维码/条形码信息
  11. }
  1. var FNScanner = api.require('FNScanner');
  2. FNScanner.openView({
  3. autorotation: true
  4. }, function(ret, err) {
  5. if (ret) {
  6. alert(JSON.stringify(ret));
  7. } else {
  8. alert(JSON.stringify(err));
  9. }
  10. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

onResume

通知当前本模块app进入回到前台。此时模块会进行一些资源的恢复操作,防止照相机回来之后黑屏

【注】:该方法需要在apiready中调用

示例代码

  1. apiready = function() {
  2. var FNScanner = api.require('FNScanner');
  3. api.addEventListener({
  4. name:'resume'
  5. }, function(ret, err){
  6. FNScanner.onResume();
  7. alert('应用回到前台');
  8. });
  9. }

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

onPause

通知当前本模块app进入后台。此时模块会进行一些资源的暂停存储操作,防止照相机回来之后黑屏

【注】:该方法需要在apiready中调用

onPause()

示例代码

  1. apiready = function() {
  2. var FNScanner = api.require('FNScanner');
  3. api.addEventListener({
  4. name:'pause'
  5. }, function(ret, err){
  6. FNScanner.onPause();
  7. alert('应用进入后台');
  8. });
  9. }

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

setFrame

重设可自定义的二维码/条形码扫描器的大小和位置

setFrame({params})

params

x:

  • 类型:数字
  • 描述:(可选项)模块左上角的 x 坐标(相对于所属的 Window 或 Frame)
  • 默认值:原值

y:

  • 类型:数字
  • 描述:(可选项)模块左上角的 y 坐标(相对于所属的 Window 或 Frame)
  • 默认值:原值

w:

  • 类型:数字
  • 描述:(可选项)模块的宽度
  • 默认值:原值

h:

  • 类型:数字
  • 描述:(可选项)模块的高度
  • 默认值:原值

示例代码

  1. FNScanner.setFrame({
  2. x: 10,
  3. y: 64,
  4. w: 300,
  5. h: 300
  6. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

closeView

关闭自定义大小的二维码/条码扫描器

closeView()

示例代码

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

decodeImg

二维码/条形码图片解码

decodeImg({params}, callback(ret, err))

sound:

  • 类型:字符串
  • 描述:(可选项)扫描结束后的提示音文件路径,要求本地路径(fs://、widget://),为保证兼容性,推荐使用 wav 格式的短音频文件

path:

  • 类型:字符串
  • 描述:(可选项)要识别的图片路径,要求本地路径(fs://、widget://),若不传则打开系统相册

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: true, //布尔型;是否解码成功
  3. content: '' //扫描的二维码/条形码信息
  4. albumPath:'', //字符串类型;选择系统相册路径(path不传时返回)
  5. }

err:

  • 类型:
  • 内部字段:
  1. {
  2. code: 1, //数字类型;错误码
  3. //1:cameraError(访问摄像头失败)
  4. //2:albumError(访问相册失败)
  5. //3:图片识别失败,请检查图片是否正确
  6. //-100:图片识别失败,编码格式不支持
  7. }

示例代码

  1. var FNScanner = api.require('FNScanner');
  2. FNScanner.decodeImg({
  3. path: 'widget://res/img/apicloud.png'
  4. }, function(ret, err) {
  5. if (ret.status) {
  6. alert(JSON.stringify(ret));
  7. } else {
  8. alert(JSON.stringify(err));
  9. }
  10. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

encodeImg

将字符串生成二维码/条形码图片

encodeImg({params}, callback(ret))

params

type:

  • 类型:字符串
  • 描述:(可选项)生成图片的类型,默认值:’qr_image’
  • 取值范围
    • bar_image(生成条形码图片)
    • qr_image(生成二维码图片)

content:

  • 类型:字符串
  • 描述:所要生成的二维码/条形码字符串,当 type 为 bar_image 时,该值只能为数字字符串

saveToAlbum:

  • 类型:布尔
  • 描述:(可选项)扫描的二维码/条形码图片是否自动保存到相册
  • 默认值:false

saveImg:

  • 类型:JSON 对象
  • 描述:(可选项)扫描的二维码/条形码图片保存所需要的参数,若不传则不保存
  • 内部字段:
  1. {
  2. path: 'fs://a.jpg', //字符串类型;保存的文件路径;若路径不存在,则创建此路径,只支持fs://协议
  3. w: 200, //(可选项)数字类型;生成图片的宽度,默认:200
  4. h: 200 //(可选项)数字类型;生成图片的高度,默认:200
  5. }

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: true, //布尔型;是否生成成功
  3. imgPath: '', //字符串类型;需要保存的二维码图片绝对路径(自定义路径)
  4. albumPath: '', //字符串类型;需要保存的二维码图片绝对路径(相册路径)
  5. }

err:

  • 类型:
  • 内部字段:
  1. {
  2. code: 2, //数字类型;错误码
  3. //2:albumError(访问相册失败)
  4. }

示例代码

  1. var FNScanner = api.require('FNScanner');
  2. FNScanner.encodeImg({
  3. content: 'http://www.apicloud.com/',
  4. saveToAlbum: true,
  5. saveImg: {
  6. path: 'fs://album.png',
  7. w: 200,
  8. h: 200
  9. }
  10. }, function(ret, err) {
  11. if (ret.status) {
  12. alert(JSON.stringify(ret));
  13. } else {
  14. alert(JSON.stringify(err));
  15. }
  16. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

switchLight

打开/关闭闪光灯(在Android上,已打开扫码视图时有效)

switchLight({params})

params

status:

  • 类型:字符串
  • 描述:(可选项)打开/关闭闪光灯,默认值:’off’
  • 取值范围:
    • on(打开)

示例代码

可用性

可提供的1.0.0及更高版本