这些wiki页面的目的是提供API方法的详细描述科尔多瓦实现cmbSDK的插件
JavaScript这边的插件,被实现为一个js文件中找到的www你的文件夹科尔多瓦应用程序。
在插件文件夹中,我们还提供了一个示例文件夹,它基本上是三个文件,可以复制到您的js / index.js css / index.css和index . html你的项目和一个cmbconfig.js自动复制到/ js文件夹,当插件安装时。
它还特别涵盖了其他实现离子和混合应用程序的方法SAP /菲奥里平台。
来开发一个很棒的应用科尔多瓦,我们首先需要用cordova启动器创建一个:
cordova create awesome-cordova-app-with-cmbsdk cd awesome-cordova-app-with-cmbsdk cordova plugin add absolute_path_to_plugin_directory //例如:/Users/superUser/cmb-cordova-master cordova platform add android //cordova platform add ios //如果你想在ios上构建
对于一个离子解决方案:
#安装离子sudo npm安装- g科尔多瓦离子#开始标签布局离子的离子应用开始awesome-ionic-app标签cd awesome-ionic-app #我们的插件添加离子科尔多瓦插件添加/工作/ PLUGINS / cmb-cordova / /路径到解压缩我们的插件#添加平台离子科尔多瓦平台添加android@7.0.0酿造更新& &酿造安装gradle #看到https://gradle.org/install/ /建立直接从控制台需要更改的权限gradlew文件sudo chmod 755/Users/**/platforms/android/gradlew //going need ionic-native too npm install ionic-native——save //将在android上运行实时刷新和控制台日志ionic cordova运行android -l -c
这将创建一个应用程序。开发人员需要熟悉开发的过程科尔多瓦.有一些怪癖,比如iOS会想要一个签名档案,还是安卓将抱怨清单文件。
一旦有了科尔多瓦应用程序构建在所需的平台,我们可以添加我们的康耐视解决方案。
在科尔多瓦插件文件夹中我们需要从样例文件夹中复制index . html进入平台www文件夹中。的index.js成www / js / index.js,和index.css成www / css / index.css.cmbconfig.js自动复制到www / js文件夹中。
如果您计划使用cmbSDK在智能手机或平板电脑(没有MX移动终端)上进行移动扫描,那么SDK需要安装许可密钥。如果没有许可证密钥,SDK仍将运行,尽管扫描结果将被混淆(SDK将随机地用星号替换扫描结果中的字符)。
请与您的康耐视销售代表联系,了解如何获取许可证密钥,包括可用于30天评估SDK的试用许可证。
安卓系统,在获得许可密钥后,在应用程序的AndroidManifest.xml文件中添加以下一行,在application标签下:
接下来,将您的密钥放在YOUR_MX_MOBILE_LICENSE的位置。
iOS。获得许可密钥后,将其作为字符串添加到应用程序的信息中。Plist文件,在键下MX_MOBILE_LICENSE.
开发人员可以使用的常量列表如下:
有两种类型的设备可以用于此科尔多瓦插件。一个MX设备是一个硬件扫描仪,还有一个智能手机摄像头。
设备:["DEVICE_TYPE_MX_1000","DEVICE_TYPE_MOBILE_DEVICE"], DEVICES_FRIENDLY: ["MX设备","相机"],
有两种类型的触发器,但是保留了6个值。为MANUAL_TRIGGER设置后,扫描过程中一旦发现条码,扫描仪将自动停止进一步扫描。为CONTINUOUS_TRIGGER它将继续寻找条形码,并在每次找到条形码时触发事件。
TRIGGER_TYPES : ["",""," MANUAL_TRIGGER”、“”、“”、“CONTINUOUS_TRIGGER”),
Availability_unknown: 0, availability_available: 1, availability_unavailable: 2,
当我们监视READER设备(Camera或MX)的连接状态时setConnectionStateDidChangeOfReaderCallback方法可以获取下列整数值之一,这些整数值可以通过常量对象
connection_state_connected: 0, connection_state_connecting: 1, connection_state_connected: 2, connection_state_disconnect: 3,
开发者可以使用以下摄像模式:
Camera_modes: [" no_aimer ", " passive_aimer ", " active_aimer ", " front_camera "]
开发人员可以访问以下预览叠加模式:
Preview_overlay_mode: [" om_cmb ", " om_legacy "],
一份可供选择的符号与我们的扫描仪一起使用。
参考维基页面相机阅读器的附录A DMCC有关支持的更多信息符号.
符号:{"符号。未知“:0,”符号。数据矩阵":1,"符号。二维码“:2,”符号。C128“:3,”符号。Upc-ean ": 4,"符号。C11“:5,”符号。C39“:6,”符号。C93“:7,”符号。I2o5 ": 8,"符号。Codabar“:9,”符号。Ean-ucc“:10,”符号。药典“:11,”符号。Maxicode“:12,”符号。Pdf417 ": 13,"符号。Micropdf417 ": 14,"符号。数据“:15,”符号。邮政网“:16,”符号。行星“:17,”符号。4STATE-JAP" : 18 ,"SYMBOL.4STATE-AUS" : 19 ,"SYMBOL.4STATE-UPU" : 20 ,"SYMBOL.4STATE-IMB" : 21 ,"SYMBOL.VERICODE" : 22 ,"SYMBOL.RPC" : 23 ,"SYMBOL.MSI" : 24 ,"SYMBOL.AZTECCODE" : 25 ,"SYMBOL.DOTCODE" : 26 ,"SYMBOL.C25" : 27 ,"SYMBOL.C39-CONVERT-TO-C32" : 28 ,"SYMBOL.OCR" : 29 ,"SYMBOL.4STATE-RMC" : 30 }
interface BarcodeResult {readString: string, symbologyString: string, symbologyString: integer, goodRead: bool, xml: string, imageGraphics?:字符串,图像?:字符串};
成功扫描的结果以JavaScript对象的形式返回,其布局如上所示。图像是可选的,它取决于enableImage() API方法。
要启动并运行扫描仪,首先要做的是调用loadScanner ()方法。
它期望设备类型和一个回调作为第二个参数。的回调函数被包装在Promise中,并作为Promise返回。
/* @return {const (string)action:所采取的操作(将始终返回LOAD READER) (string) result:来自服务器的消息(bool) status:如果读取器被加载,它将返回true (string) err:如果抛出错误则返回字符串错误(int) type:我们连接的设备类型[0,1](string) name:设备类型的名称DEVICES[type]} */
设备类型参数可以是一个字符串常量,可能的值为:
设备:[" device_type_mx_1000 "," device_type_mobile_device "]
或者我们可以直接为DEVICE_TYPE_MX传递0,为DEVICE_TYPE_MOBILE_DEVICE传递1
cmbScanner.loadScanner("DEVICE_TYPE_MOBILE_DEVICE",function(result){cmbScanner.connect();});//示例作为承诺cbscanner . loadscanner ("DEVICE_TYPE_MOBILE_DEVICE").then(函数(结果){cbscanner .connect();});//示例将设备类型传递为整数cbscanner . loadscanner (0).then(function(result){cbscanner .connect();});
要在加载READER后连接到它,我们需要使用连接.
cmbScanner.connect((回调));
/* @返回(承诺){状态:布尔值,如果连接成功则为true,如果不为false err:字符串,如果状态为false err将不为null} */
/**使用connect并返回承诺值*/ cmbScanner.connect().then(function(connectionState){console.log(connectionState);// {"status": false, "err": "Did not return OK in success"}});/**使用connect并将值作为回调函数返回*/ cmbScanner.connect(function(connectionState){console.log(connectionState);});
的结果连接action,不建议对连接回调的结果进行操作,目的是更新DOM元素或调用只有在我们有连接集之后才有效的API方法。
有一个监听器回调(setConnectionStateDidChangeOfReaderCallback)可以设置的函数,它总是会在连接状态发生变化时触发我们应该保留那里的代码。
/* @返回(承诺){状态:布尔值,如果连接成功则为true,如果不为false err:字符串,如果状态为false err将不为null} */
就像这样connect (),有一个断开()方法,其作用与connect ():
cmbScanner.disconnect((回调))
类似于connect (),断开()too返回回调函数中的connectionState(它被包装成Promise),我们可以对connectionState进行操作,例如将标签从“connected”更改为“disconnected”:
cmbScanner.disconnect(function(connectionState){if(connectionState == cmbScanner.CONSTANTS.CONNECTION_STATE_DISCONNECTED){document.getElementById('some-label').innerHtml('DISCONNECTED');} else if (connectionState == cmbScanner.CONSTANTS.CONNECTION_STATE_CONNECTED){document.getElementById('some-label').innerHtml('DISCONNECTED');}})
但是,就像connect ()我们没必要这么做,因为setConnectionStateDidChangeOfReaderCallback ()将监听器设置为所有连接/断开/连接/断开事件。
要处理成功的扫描结果,需要设置ResultCallback函数。这是通过setResultCallback.
它为所有对象设置回调函数didReceiveReadResultFromReader事件。
cmbScanner.setResultCallback(函数(结果){if(结果&&结果。readResults && result.readResults.length > 0){result.readResults.lengthforEach(函数(项目,索引){if(项目,索引)goodRead == true){//对条形码读取执行一些操作//例如:document.getElementById('content')。insertAdjacentHTML('beforeend',''+item。symbologyString +”< / span >: ' + item.readString + < / div >);//我们可以把所有这些DOM处理放在DOM helper对象中,但由于它只是一行代码,让我们保留它}else{//在没有读取条形码时执行一些操作或将其保留为空// navigator.notification.alert("Stopped");}});}});
ResultCallback将在每次进行条形码扫描时触发(或者扫描仪被手动停止,或者它超时而没有结果)。
结果对象
条形码结果的结构如下:
-result.readResults- json数组。如果你在这里使用多码模式,你会发现主结果(所有部分结果合并在一个readString中)和所有其他部分结果
-result.subReadResults-所有部分结果的json数组(如果使用单代码模式,该数组将为空)
-result.xml- XML格式的来自阅读器设备的完整结果的字符串表示
result.readResults和result.subReadResults是json数组,包含具有这种结构的项:
-item.readString-条形码的字符串表示
-item.symbologyString-检测到的条形码符号的字符串表示
-item.goodRead- bool,表示条码是否扫描成功
-。-以XML格式表示部分结果的字符串
-item.imageGraphics-表示SVG图像从最后检测帧的字符串
-item.image- base64字符串,包含来自最后检测帧的图像
监视MX设备使用的可用性:
在可用性更改上设置侦听器。将在设备可用或失去可用性时触发。
cmbScanner.setAvialabilityCallback(函数(可用性){/ * * *可用性- int表示设备的可用性* /如果(可用性= = CONSTANTS.AVAILABILITY_UNKNOWN){/ /执行一些操作时设备可用性}不知道其他如果(可用性= = CONSTANTS.AVAILABILITY_AVAILABLE){/ /执行一些操作设备时可用}其他如果(可用性= = CONSTANTS.AVAILABILITY_UNAVAILABLE){/ /执行一些操作时设备不可用}});
所有连接/断开连接事件应该在回调函数集中用这个API方法处理。
回调是可选的,因为插件提供了一个默认的回调来处理连接/断开连接事件,但默认回调只是一个占位符函数,并没有为最终应用程序开发人员提供太多功能。
当connetionStateDidChange被触发时,它将返回4个可能的整数值之一
这些可以作为整数直接访问,或者开发人员可以通过访问cmbScanner中的CONSTANTS对象从可用的CONSTANTS枚举中使用它们.
具体例子如下:
cmbScanner.setConnectionStateDidChangeOfReaderCallback(function(connectionState){if(connectionState == cmbScanner.CONSTANTS.CONNECTION_STATE_CONNECTED){//在连接时做一些事情,比如设置一个符号为enabled返回cmbScanner.setSymbologyEnabled(" symbol . qr ",true).then(function(rr){//看到setSymbologyEnabled关于rr(返回结果)对象的更多信息//符号设置后,我们可以发送一个命令。让我们设置闪光灯在cmbScanner上。sendCommand(“光。INTERNAL-ENABLE ON") .then(function(result){//如果命令成功,当我们开始扫描过程时,我们应该让LIGHT打开//并且要检查闪光灯是否打开,我们可以使用isLightsOn API方法cmbScanner.isLightsOn().then(function(lights_on){//灯应该打开});});});}});
在这里我们不仅听连接/断开连接事件,但我们也启用一些符号和设置闪光灯,通过命令和API方法isLightsOn.
要启动/停止扫描进程,我们使用以下两种方法。它们既可以通过应用程序的UI从按钮调用,也可以通过编程方式调用。
由于读者的性质,我们应该始终设置setActiveStartScanningCallback ()函数,如果我们想基于扫描器(Reader)的状态来控制某些DOM元素。
cmbScanner.startScanning(function(scannerState){if(scannerState) document.getElementById('scanner-active-label')[removed] = 'RUNNING';else document.getElementById('scanner-active-label')[removed] = 'STOPPED';});
< a href = " cmbScanner.startScanning ();">Start Scanner Stop Scanner Start Scanner
如果我们想监视扫描器(READER)的状态,我们需要设置这个回调函数。
cmbScanner.setActiveStartScanningCallback(function(scannerState){if(scannerState == true){console.log('扫描仪正在工作');} else{console.log('扫描器不工作');}});
方法上设置回调函数的需要完全消除了startScanning ()或stopScanning ()方法。
尽管在承诺或回调中立即返回该操作似乎更合适startScanning ()/stopScanning ()被称为,缘于本性stopScanning过程,每次有结果时都会发生,最好在同一位置侦听两个操作(启动和停止)。
setsymbolologyenabled (symbol,on_off,[callback]) /* @return一个包含JSON对象的承诺{action:被调用的DMCC命令状态:它是否成功,如果发生错误,它将被设置为false结果:如果符号启用则为true,如果没有则为false err:操作未完成时的错误消息}*/
如何使用它的例子:
cmbScanner.setSymbologyEnabled(“SYMBOL.C93”,的确,函数(结果){console.log (JSON.stringify(结果));//输出{"action": "SET SYMBOL. "C93 ON","status": true, "result": true, "err": null}});//或使用承诺cbscanner . setsymbolologyenabled ("SYMBOL.C93",true).then(function(result){console.log(JSON.stringify(result));//输出{"action": "SET SYMBOL. "C93 ON","status": true, "result": true, "err": null}});
要检查是否启用了某个符号,可以使用isSymbologyEnabled ().
/** @return一个承诺,包含对象{action:被调用的DMCC命令status:它是否成功,如果发生错误,它将被设置为false result:如果符号被启用则为true,如果没有则为false err:如果操作未完成则错误消息}*/
cmbScanner.isSymbologyEnabled(“SYMBOL.C93函数(rr) {console.log (JSON.stringify (rr));//输出{"action": "GET符号。C93”、“地位”:真的,“犯错”:空,“结果”:真正}});
当我们使用相机设备作为条形码阅读器时,要设置相机的行为:
/**使用无瞄准镜的相机。预览是打开的,照明可用。NO_AIMER = 0,使用带有基本瞄准器的相机(例如StingRay)。预览关闭,照明不可用。PASSIVE_AIMER = 1,使用主动瞄准器的相机(例如MX-100)。预览关闭,照明可用。ACTIVE_AIMER = 2,使用移动设备前置摄像头。预览打开,照明不可用。Front_camera = 3 */
/* @params x,y,w,h x,y:左上方位置w,h:矩形的宽度和高度在整个容器的百分比*/
cmbScanner.setPreviewContainerPositionAndSize(0、0100、50);//将设置预览为0,0和100%宽度50%高度
要以编程方式启用闪光灯,我们可以使用:
/** @return一个包含JSON对象{(string) action:被调用的DMCC命令(bool) status:是否成功,如果发生错误,它将被设置为false (string) err:操作未完成时的错误消息(bool) result:所采取的操作的结果,在这种情况下,如果灯亮起,则为TRUE,否则为false} */
cmbScanner.setLightsOn(真的,函数(响应){/ / console.log(响应);});cmbscannler . setlightson (true).then(function(response){//或带有一个promise,回调函数被包装在一个promise中//所以如果我们不设置一个回调函数作为参数,将使用默认的回调函数//它将返回一个promise来继续链});
要检查闪光灯是否亮着,我们可以使用:
/** @return一个包含JSON对象{(string) action:被调用的DMCC命令(bool) status:是否成功,如果发生错误,它将被设置为false (string) err:操作未完成时的错误消息(bool) result:所采取的操作的结果,在这种情况下,如果灯亮起,则为TRUE,否则为false} */
cmbScanner.isLightsOn(真的,函数(响应){/ / console.log(响应);});cmbscannler . islightson (true).then(function(response){//或带有一个promise,回调函数被包装在一个promise中//所以如果我们不设置一个回调函数作为参数,将使用默认的回调函数//它将返回一个promise来继续链});
如果我们想要返回我们使用的解码器看到的最后一个图像enableImage ().如果我们想要图像的图形统计返回的图像,我们使用enableImageGraphics()。
cmbScanner.enableImage(真正的);//它将启用结果中的图像cmbScanner.enableImageGraphics(true);//将显示条码在图像上被检测到的确切位置
条形码结果对象的结构为:
interface BarcodeResult {readString: string, symbologyString: string, symbologyString: integer, goodRead: bool, xml: string, imageGraphics?:字符串,图像?:字符串};
大多数API方法都可以通过向MX(或Camera)阅读器发送适当的命令来替代。
Send命令接收回调并将其包装成承诺,这样链就可以继续。
使用
cmbScanner。sendCommand(“设置标志。) .then(function(result){//在承诺中让我们看看我们的命令做了什么console.log(JSON.stringify(result));});//或者像这个cmbScanner。sendCommand(“光。) .then(function(result){//如果命令成功,当我们启动扫描过程时,我们应该让LIGHT打开console.log(JSON.stringify(result));});
第一个命令将禁用象征POSTNET.第二个按钮将打开Flash。
这两种操作都可以使用相应的API函数来执行setSymbologyEnabled ()和setLightsOn ()一般来说,开发人员应该总是更喜欢API函数sendCommand()。
然而,在某些情况下,Cordova插件不涵盖某些用例场景,我们总是可以使用sendCommand的。
如果我们想改变MX设备“哔哔声”和“灯光”的方式,我们可以使用:
行动 | 命令 | 参数 | 参数值 | 参数说明 | 产生的作用 |
---|---|---|---|---|---|
设置|获取 |
输出。USER-CONFIGURE |
事件数,提示音,提示数,LED颜色,震动 |
[1,2] [0-2] [0-3] [0-7] [on | off] |
1: user_event_1, 2: user_event_2 |
设置USER_EVENT_1或USER_EVENT_2的蜂鸣声和蜂鸣声次数。 |
在我们的例子中,我们会有:
cmbScanner。sendCommand(“设置输出。USER-CONFIGURE1 1 2 4 ON").then(function(response){ //console.log(response); //print out the result of the action });
这将配置用户事件#1到两个中蜂鸣声与红色LED和振动。为了激活这个事件,我们使用:
cmbScanner.sendCommand("OUTPUT.USER1").then(function(response){//这将调用USER1的存储设置项,因此MX设备基本上会发出两次红色LED和振动})
如果我们需要重置MX/Camera阅读器存储的配置设置,我们可以使用:
cmbScanner.resetConfig(函数(结果){console.log(结果);})
/* @return一个包含JSON对象{(string) action的承诺:被调用的DMCC命令(bool)状态:它是否成功,如果发生错误,它将被设置为false (string) err:如果操作没有完成,有一个错误,则错误消息。默认为null (bool) result: sendCommand动作的结果}*/