乐趣区

关于java:APICloud开发者进阶之路-FNScanner二维码接口openView自定义扫码Demo

FNScanner 模块是一个二维码 / 条形码扫描器,是 scanner 模块的优化升级版。在 iOS 平台上本模块底层集成了 Zbar 和零碎自带的条形码 / 二维码剖析库,因为 IOS 零碎平台在 IOS7.0 以上才凋谢了二维码 / 条码的相干接口,所以在 IOS6 上运行时模块会调用开源库 Zbar 去读取解析二维码 / 条码。只有在 IOS7 以上版本才会调用零碎自带扫码性能。

模块文档地址(点击即可跳转)

模块须要留神的中央:
1. 留神:应用本模块前,需在云编译页面勾选增加拜访摄像头权限,若要拜访相册也需勾选申请拜访相册权限。
2.  不能同时应用的模块:wwprint

本模块封装了两套扫码计划:
计划一
开发者通过调用 openScanner 接口间接关上自带默认 UI 成果的二维码 / 条形码扫描页面,本界面相当于关上一个 window 窗口,其界面内容不反对自定义。用户可在此界面实现性能如下:
关上敞开闪关灯
从零碎相册选取二维码 / 条码图片进行解密操作
关上摄像头,主动对焦扫码想要解析的二维码 / 条码

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

计划一我就不介绍,因为间接调取接口就能间接显示一个扫码 ui 界面,间接应用就能够,
楼主本帖分享的是计划一无奈满足 ui 设计成果前提下,怎么实现 ui 自定义的成果;

计划二实现页面截图

计划二关上闪光灯成果界面截图

第一步:首先先关上 openwin,而后再关上模块,而后提早关上一个 frm 自定义一个扫码见面。大家下面看到扫码是这种思路的;

废话不多说上局部外围源码

`1.   var FNScanner, eHeader, headerH;

  1.     apiready = function() {
  2.         // 利用全局 FNScanner 模块
  3.         FNScanner = api.require(‘FNScanner’);
  4.         // 定义依据 id 获取 dom
  5.         eHeader = $api.byId(‘header’);
  6.         // 设置头部沉迷式
  7.         $api.fixStatusBar(eHeader);
  8.         // 获取头部高度
  9.         headerH = $api.offset(eHeader).h;
  10.         // 监听利用回到前台
  11.         api.addEventListener({
  12.             name: ‘resume’
  13.         }, function(ret, err) {
  14.             FNScanner.onResume();
  15.         });
  16.         // 监听利用回到后盾
  17.         api.addEventListener({
  18.             name: ‘pause’
  19.         }, function(ret, err) {
  20.             FNScanner.onPause();
  21.         });
  22.       
  23.         fnOpenFNScanner();
  24.     }
  25.     function fnOpenFNScanner() {
  26.         // 关上扫码模块
  27.         FNScanner.openView({
  28.             //autorotation: true,
  29.             fixedOn: api.frameName,
  30.             rect: {
  31.                 x: 0,
  32.                 y: headerH,
  33.                 w: api.frameWidth,
  34.                 h: api.frameHeight
  35.             }
  36.         }, function(ret, err) {
  37.             if (ret) {
  38.                 if (ret.eventType == ‘success’ && ret.content != ”) {
  39.                     // 扫码胜利执行函数操作传值
  40.                     fnOpenCouple(ret.content);
  41.                     return;
  42.                 }
  43.                 if (ret.eventType == ‘cameraError’) {
  44.                     api.toast({
  45.                         msg: ‘ 请开启 app 拜访手机摄像头权限 ’,
  46.                         duration: 2000,
  47.                         location: ‘bottom’
  48.                     });
  49.                     setTimeout(function() {
  50.                         // 敞开扫码器  敞开扫码界面
  51.                         back();
  52.                     }, 300);
  53.                     return;
  54.                 }
  55.                 if (ret.eventType == ‘albumError’) {
  56.                     api.toast({
  57.                         msg: ‘ 请开启 app 拜访手机相册权限 ’,
  58.                         duration: 2000,
  59.                         location: ‘bottom’
  60.                     });
  61.                     setTimeout(function() {
  62.                         back();
  63.                     }, 300);
  64.                     return;
  65.                 }
  66.                 if (ret.eventType == ‘fail’) {
  67.                     api.toast({
  68.                         msg: ‘ 扫码失败, 请从新扫码 ’,
  69.                         duration: 2000,
  70.                         location: ‘bottom’
  71.                     });
  72.                     setTimeout(function() {
  73.                         back();
  74.                     }, 300);
  75.                     return;
  76.                 }
  77.             } else {
  78.                 api.toast({
  79.                     msg: ‘ 扫码谬误请稍后再试 ’,
  80.                     duration: 2000,
  81.                     location: ‘bottom’
  82.                 });
  83.                 setTimeout(function() {
  84.                     back();
  85.                 }, 300);
  86.             }
  87.         });
  88.         setTimeout(function() {
  89.             // 关上扫码动画 frm 页面
  90.             api.openFrame({
  91.                 name: ‘add_frm’,
  92.                 url: ‘./add_frm.html’,
  93.                 rect: {
  94.                     marginTop: headerH,
  95.                     marginLeft: 0,
  96.                     marginRight: 0,
  97.                     marginBottom: 0
  98.                 },
  99.                 bgColor: ‘rgba(0,0,0,0)’,
  100.             });
  101.         }, 300);
  102.     }
  103.     // 返回
  104.     function back() {
  105.         // 敞开 win 页面
  106.         api.closeWin();
  107.         // 敞开扫码模块
  108.         FNScanner.closeView();
  109.     }
  110.     // 关上最初扫码得出的数值
  111.     function fnOpenCouple(content) {
  112.         console.warn(content);
  113.         back(); // 倡议关上下一页我这块只是为了不便间接调用返回按钮   扫码胜利之后必须敞开扫码模块  不然会呈现屡次扫码状况
  114.     }
  115.     var isSOff = true;
  116.     // 关上闪光灯
  117.     function fnOpenLamp() {
  118.         if (isSOff) {
  119.             FNScanner.switchLight({
  120.                 status: ‘on’
  121.             });
  122.             isSOff = false;
  123.         } else {
  124.             FNScanner.switchLight({
  125.                 status: ‘off’
  126.             });
  127.             isSOff = true;
  128.         }
  129.     }

_复制代码_`

退出移动版