这些wiki页面的目的是提供API方法的详细描述科尔多瓦实现cmbSDK的插件。
插件在JavaScript方面的东西,是作为一个实现的js文件,可以在www你的文件夹科尔多瓦应用程序。
在插件文件夹中,我们还提供了一个示例文件夹,基本上是三个文件,可以复制到您的js / index.js css / index.css和index . html你的项目和一个cmbconfig.js文件,该文件将自动复制到/ js文件夹,当插件安装时。
它还特别涵盖了其他实现离子混合应用方法基于SAP/FIORI平台。
来创建一个很棒的应用程序科尔多瓦,我们首先需要创建一个与科尔多瓦启动器:
cordova使用cmbsdk创建awesome cordova应用程序cd awesome cordova应用程序使用cmbsdk cordova插件将绝对路径添加到插件目录//例如:/Users/superUser/cmb cordova master cordova platform添加安卓//cordova platform添加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 /用户/ * * /平台/ android / gradlew / /需要ionic-native太npm安装ionic-native——保存/ /将运行在android系统实时刷新和控制台日志离子科尔多瓦运行android - l - c
这将创建一个应用程序。开发人员需要熟悉在上进行开发的过程科尔多瓦.有一些怪癖,比如iOS想要签名配置文件,还是安卓将抱怨清单文件。
一旦有一个科尔多瓦我们可以添加我们的congnex解决方案。
在科尔多瓦插件文件夹,从样本文件夹,我们需要复制index . html到平台www文件夹中。的index.js成www / js / index.js,和index.css成www / css / index.css.cmbconfig.js自动复制到www / js文件夹中。
如果您计划使用cmbSDK来使用智能手机或平板电脑(没有MX移动终端)进行移动扫描,那么SDK需要安装许可密钥。没有许可密钥,SDK仍然可以运行,尽管扫描结果会被混淆(SDK会用星号字符随机替换扫描结果中的字符)。
请与您的康耐视销售代表联系,了解如何获取许可密钥,包括可用于评估SDK 30天的试用许可。
安卓系统,获得许可密钥后,在应用程序的AndroidManifest.xml文件的application标签下添加以下行:
<元数据android: name = " MX_MOBILE_LICENSE " android: value = " YOUR_MX_MOBILE_LICENSE " / >
接下来,将您的密钥放在YOUR_MX_MOBILE_LICENSE的位置。
iOS。获得许可密钥后,将其作为字符串添加到应用程序的Info中。Plist文件,在密钥下MX_移动_许可证.
开发者可以使用的常量列表如下:
你可以使用两种类型的设备科尔多瓦插件。MX设备是一个硬件扫描仪,还有一个智能手机摄像头。
设备:["DEVICE_TYPE_MX_1000","DEVICE_TYPE_MOBILE_DEVICE"], DEVICES_FRIENDLY: ["MX Device","Camera"],
有两种类型的触发器,但有六个值是保留的。为MANUAL_TRIGGER设置,一旦在扫描过程中发现条形码,扫描仪将自动停止进一步扫描。为连续触发它将继续寻找条形码,并在每次找到条形码时触发事件。
TRIGGER_TYPES : ["",""," MANUAL_TRIGGER”、“”、“”、“CONTINUOUS_TRIGGER”),
Availability_unknown: 0, availability_available: 1, availability_unavailable: 2,
当我们监视READER设备(摄像头或MX)的连接状态setConnectionStateDidChangeOfReaderCallback可以得到下列整数值之一,可以通过常量对象
connection_state_disconnect: 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 Camera Reader的DMCC的更多信息符号.
符号:{"符号。未知“:0,”符号。数据矩阵“:1,”符号。Qr“: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,"符号。Databar“: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 }
接口条形码结果{readString:string,symbologyString:string,symbology:integer,goodRead:bool,xml:string,imageGraphics?:string,image?:string};
成功扫描的结果以JavaScript对象的形式返回,其布局如上所示。图像是可选的,它取决于enableImage() API方法。
要让扫描器启动并运行,首先要做的就是调用loadScanner ()方法。
预计一个设备类型和一个回调函数作为第二个参数。的回调函数被包装在Promise中,并作为Promise返回。
/ * @return{常量(string)行动:采取行动(将始终返回负载读者)(string)结果:来自服务器的消息(bool)状态:如果读者加载它将返回true(字符串)错误:错误的字符串如果是抛出一个错误(int)类型:设备的类型,我们连接到[0,1](string)名称:设备类型的名称DEVICES[type]} */
设备类型参数可以是字符串常量,取值如下:
设备:[“DEVICE_TYPE_MX_1000”、“DEVICE_TYPE_MOBILE_DEVICE”]
或者我们可以传入0作为DEVICE_TYPE_MX, 1作为DEVICE_TYPE_MOBILE_DEVICE
//作为回调示例:cmbScanner.loadScanner("DEVICE_TYPE_MOBILE_DEVICE",function(result){cmbScanner.connect();});// cmbScanner.loadScanner("DEVICE_TYPE_MOBILE_DEVICE").then(function(result){cmbScanner.connect();});//将设备类型作为整数传递cmbScanner.loadScanner(0).then(function(result){cmbScanner.connect();});
要在加载后连接到READER,我们需要使用连接.
cmbScanner.connect((回调));
/* @return (promise) {status: boolean,如果连接成功,则为true如果不是false err: string,如果状态为false err将不为null} */
*/ 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对connect回调的结果进行操作,以更新DOM元素或调用只有在拥有连接集后才有效的API方法。
有一个监听器回调(setConnectionStateDidChangeOfReaderCallback)可以设置的函数,它总是会触发每当连接状态发生变化时我们应该把代码保留在那里。
/* @return (promise) {status: boolean,如果连接成功,则为true如果不是false err: string,如果状态为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.
它为all设置回调函数didReceiveReadResultFromReader事件。
cmbScanner.setResultCallback(function(result){if(result && result);readResults && result.readResults.length > 0);forEach(function (item, index)){if (item. index);goodRead == true){//对条形码读取执行一些操作//示例:document.getElementById('content')。insertAdjacentHTML (' beforeend ', ' < div class = "结果" > <跨类=“象征”>“+项目。symbologyString +”< / span >: ' + item.readString + < / div >);//我们可以把所有这些DOM处理都放在DOM helper对象中,但因为它只是一行代码,所以让它保持不变。} });}});
ResultCallback将在每次条形码扫描时触发(或者扫描仪被手动停止,或者由于没有结果而超时)。
条码结果的结构如下:
要监控MX设备使用的可用性:
在可用性更改时设置侦听器。将在设备可用或失去可用时触发。
cmbScanner.setAvialabilityCallback(函数(可用性){/ * * *可用性- int表示设备的可用性* /如果(可用性= = CONSTANTS.AVAILABILITY_UNKNOWN){/ /执行一些操作时设备可用性}不知道其他如果(可用性= = CONSTANTS.AVAILABILITY_AVAILABLE){/ /设备时执行一些动作} else if (availability == CONSTANTS.AVAILABILITY_UNAVAILABLE){//当设备不可用时执行一些操作}});
所有连接/断开事件应该在使用此API方法的回调函数集中处理。
这个回调是可选的,因为插件提供了一个默认的回调来处理连接/断开事件,但默认回调只是一个占位符函数,不能为终端应用程序开发人员提供太多功能。
当connetionStateDidChange触发时,它将返回4个可能的整数值之一
这些可以作为整数直接访问,或者开发人员可以通过访问cmbScanner中的CONSTANTS对象,从可用的CONSTANTS enum中使用它们.
这方面的实例如下:
cmbScanner.setConnectionStateDidChangeOfReaderCallback(function(connectionState){if(connectionState == cmbScanner.CONSTANTS.CONNECTION_STATE_CONNECTED){//在连接时做事情,然后(function(rr){//请参阅setSymbologyEnabled以获得关于rr(返回结果)对象的更多信息//在符号被设置之后,我们可以发送一个命令。让我们把闪光灯设置在cmbScanner上。sendCommand(“光。INTERNAL-ENABLE”)(函数(结果){/ /命令是否成功我们应该光打开当我们开始扫描过程/ /而且检查是否我们可以使用flash isLightsOn API方法cmbScanner.isLightsOn()(函数(lights_on){/ /光应该});});});}});
在这里我们不仅听连接/断开事件,但我们也启用了一些符号,并通过命令和API方法打开闪光灯isLightsOn.
为了启动/停止扫描过程,我们使用这两种方法。它们可以通过应用程序的UI从按钮调用,也可以通过编程方式调用。
由于读者的性质,我们应该始终设置setActiveStartScanningCallback ()函数,如果我们想根据扫描器(Reader)的状态来控制某些DOM元素。
cmbScanner.startScanning(函数(scannerState){if(scannerState)document.getElementById('scanner-active-label')[removed]=“RUNNING';else document.getElementById('scanner-active-label')[removed]=“STOPPED';});
< a href = " cmbScanner.startScanning ();" < / > < >开始扫描仪!--button to start the scanner --> Stop Scanner Start Scanner
如果我们想要监视扫描器(READER)的状态,我们需要设置这个回调函数。
cmbScanner.setActiveStartScanningCallback(function(scannerState){if(scannerState == true){console.log('扫描仪正在工作');} else{console.log('扫描器不工作');}});
如前所述,设置此函数完全不需要在startScanning ()或stopScanning ()方法。
尽管让动作在承诺中返回或在之后立即回调似乎更合适startScanning ()/stopScanning ()被称为,由于性质stopScanning过程,每次有结果时都会发生,最好在同一个地方同时听两个动作(开始和停止)。
setSymbologyEnabled(象征,on_off(回调))/ * @return承诺包含JSON对象{行动:DMCC命令调用状态:它成功与否,如果一个错误发生,它将被设置为false结果:如果启用了象征那么真,如果不是那么假犯错:错误消息如果操作没有完成}* /
如何使用它的例子:
cmbScanner.setSymbologyEnabled(“SYMBOL.C93”,的确,函数(结果){console.log (JSON.stringify(结果));//将打印{"action": "SET SYMBOL. "C93 ON","status": true, "result": true, "err": null}});//使用承诺cmbScanner.setSymbologyEnabled("SYMBOL.C93",true).then(function(result){console.log(JSON.stringify(result));//将打印{"action": "SET SYMBOL. "C93 ON","status": true, "result": true, "err": null}});
要检查是否启用了符号,我们使用isSymbologyEnabled ().
/ * * @return承诺包含对象{行动:DMCC命令调用状态:它成功与否,如果发生了一个错误就会设置为false结果:如果启用了象征那么真实,如果不是那么假犯错:错误消息如果操作没有完成}* /
cmbScanner.isSymbologyEnabled(“SYMBOL.C93函数(rr) {console.log (JSON.stringify (rr));//将打印{"action": "GET SYMBOL. "C93”、“地位”:真的,“犯错”:空,“结果”:真正}});
当我们使用摄像头设备作为条形码阅读器时,设置摄像头的行为方式:
/**使用没有瞄准装置的相机。“预览”处于启用状态,照明可用。NO_AIMER=0,使用带有基本瞄准器的相机(例如黄貂鱼)。预览已关闭,照明不可用。被动瞄准仪=1,使用带有主动瞄准仪的相机(例如MX-100)。“预览”处于禁用状态,照明可用。活动摄像头=2,使用移动设备前摄像头。“预览”处于启用状态,照明不可用。前摄像头=3*/
/* @params x,y,w,h x,y:左上角位置w,h:矩形的宽度和高度(占整个容器的百分比)*/
cmbScanner.setPreviewContainerPositionAndSize(0、0100、50);//将设置预览为0,0和100%宽50%高
要以编程方式启用闪光灯,我们可以使用:
/ * * @return承诺包含JSON对象{(string)行动:DMCC命令被调用(bool)地位:它成功与否,如果一个错误发生,它将被设置为false(字符串)错误:错误消息如果操作没有完成(bool)结果:执行操作的结果,在这种情况下,如果灯光被启用,则为TRUE,否则为false} */
cmbScanner.setLightsOn(真的,函数(响应){/ / console.log(响应);});cmbScanner.setLightsOn(true).then(function(response){//或者带有承诺的回调函数被包装在一个承诺中//所以如果我们不设置一个回调函数作为参数,将使用默认的一个回调函数//它将返回一个承诺来继续链});
要检查闪光灯是否亮起,我们可以使用:
/ * * @return承诺包含JSON对象{(string)行动:DMCC命令被调用(bool)地位:它成功与否,如果一个错误发生,它将被设置为false(字符串)错误:错误消息如果操作没有完成(bool)结果:执行操作的结果,在这种情况下,如果灯光被启用,则为TRUE,否则为false} */
cmbScanner.isLightsOn(真的,函数(响应){/ / console.log(响应);});cmbScanner.isLightsOn(true).then(function(response){//或者带有承诺的回调函数被包装在一个承诺中//所以如果我们不设置一个回调函数作为参数,将使用默认的一个回调函数//它将返回一个承诺来继续链});
如果我们想返回我们使用的解码器看到的最后一幅图像enableImage ().如果我们想要使用返回图像的图像统计enableImageGraphics()。
cmbScanner.enableImage(真)//它将启用结果扫描仪中的图像。启用图像图形(true)//将显示在图像上检测到条形码的确切位置
条形码结果对象的结构为:
接口条形码结果{readString:string,symbologyString:string,symbology:integer,goodRead:bool,xml:string,imageGraphics?:string,image?:string};
大多数API方法都可以用向MX(或Camera)读取器发送适当的命令来代替。
Send命令接收回调并将其封装到承诺中,这样链就可以继续。
使用
cmbScanner。sendCommand(“设置标志。POSTNET OFF") .then(function(result){//在promise中让我们看看我们的命令做了什么});//类似cmbScanner。sendCommand(“光。then(function(result){//如果命令成功,当我们启动扫描进程时,应该将LIGHT打开。});
第一个命令将禁用象征POSTNET.第二个按钮将设置Flash ON。
这两种操作都可以通过相应的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/摄像头读卡器存储的配置设置,我们可以使用:
cmbScanner.resetConfig(函数(结果){console.log(结果);})
/ * @return承诺包含JSON对象{(string)行动:DMCC命令被调用(bool)地位:它成功与否,如果一个错误发生,它将被设置为false(字符串)错误:错误消息如果操作没有完成,有一个错误。default是null (bool) result: sendCommand动作的结果}*/