这些wiki页面的目的是提供API方法的详细描述科尔多瓦实现cmbSDK的插件。
插件在JavaScript方面的东西,是作为一个实现的js文件,可以在www的文件夹科尔多瓦应用程序。
在插件文件夹中,我们还提供了一个示例文件夹,它基本上是可以复制的三个文件js / index.js css / index.css和index.html.你的项目和一个cmbconfig.js自动复制到数据库的文件/ js文件夹,当插件安装时。
具体来说,它也涵盖了其他实现离子以及基于SAP /菲奥里平台。
来创建一个很棒的应用程序科尔多瓦,我们首先需要创建一个Cordova Starter:
//例如:/Users/superUser/cmb-cordova-master cordova platform add android //cordova platform add ios //如果你想在ios上构建
为离子解决方案:
#install离子须藤NPM安装-g科尔多瓦离子#开始与标签离子应用布局离子开始真棒离子型,应用标签CD真棒离子-应用#将我们的插件离子科尔多瓦插件添加/工作场所/插件/ CMB-科尔多瓦//路径您解压缩我们的插件#将平台离子科尔多瓦平台添加android@7.0.0冲泡更新&& BREW直接从控制台需要改变安装到构建gradle这个#看到https://gradle.org/install/ //该gradlew文件须藤的权限搭配chmod 755 /用户/ ** /平台/安卓/ gradlew //将需要离子原生太NPM安装离子本地--save //将在Android上实时刷新和控制台运行日志离子科尔多瓦运行Android -l -c
这将创建一个应用程序。开发人员需要熟悉开发的过程科尔多瓦.有怪癖,喜欢网间网操作系统需要签名配置文件,或安卓会抱怨清单文件。
一旦有一个科尔多瓦应用程序,建立所需的平台上,我们可以添加我们的康耐视的解决方案。
在科尔多瓦从样本插件文件夹的文件夹,我们需要复制index.html.到平台www文件夹。这index.js进入WWW / JS / index.js,和index.css进入www / css / index.css.cmbconfig.js自动复制到www / js文件夹。
如果您计划使用cmbSDK来使用智能手机或平板电脑(没有MX移动终端)进行移动扫描,那么SDK需要安装许可密钥。没有许可密钥,SDK仍然可以运行,尽管扫描结果会被混淆(SDK会用星号字符随机替换扫描结果中的字符)。
联系您的Cognex销售代表,了解如何获得许可证密钥,包括可用于评估SDK 30天的试用许可证。
安卓-获得许可密钥后,在应用程序的AndroidManifest.xml文件的application标签下添加以下行:
接下来,将密钥放在您的\u MX\u MOBILE\u许可证的位置。
<应用android: hardwareAccelerated = " true " android:图标=“@mipmap /图标”android: label = " @string / app_name " android: supportsRtl = " true " > <活动android: configChanges =”取向| keyboardHidden拉键盘| | |地区“android: label = " @string / activity_name " android: launchMode =“singleTop”android: name = " MainActivity "android:主题= " / Theme.DeviceDefault @android:风格。NoActionBar" android:windowSoftInputMode="adjustResize"> < /应用程序>
iOS。获得许可密钥后,将其作为字符串添加到应用程序的Info中。Plist文件,在密钥下MX_MOBILE_LICENSE.
开发人员可以使用的常量列表如下:
你可以使用两种类型的设备科尔多瓦插件。一个MX设备(硬件扫描仪)和一个智能手机摄像头。
设备:["DEVICE_TYPE_MX_1000","DEVICE_TYPE_MOBILE_DEVICE"], DEVICES_FRIENDLY: ["MX Device","Camera"],
触发器有两种类型,但保留了六个值。对于手动触发设置,一旦在扫描过程中找到条形码,扫描仪将自动停止进一步扫描。为了CONTINUOUS_TRIGGER它将继续查找条形码,并在每次找到条形码时触发事件。
触发器类型:[”、“手动触发器”、“连续触发器”、“手动触发器”、“连续触发器”],
Availability_unknown: 0, availability_available: 1, availability_unavailable: 2,
当我们监视读取器设备的连接状态(相机或MX)时setConnectionStateDidChangeOfReaderCallback我们获得了可以通过访问以下整数值之一常量对象
连接状态断开:0,连接状态断开:1,连接状态断开:2,连接状态断开:3,
开发人员可以访问以下相机模式:
camera_modes:[“no_aimer”,“passive_aimer”,“active_aimer”,“front_camera”]
开发人员可以访问以下预览覆盖模式:
preview_overlay_mode:[“om_cmb”,“om_legacy”],
可用的列表符号和我们的扫描仪一起使用。
请参阅wiki页面附录A为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 }
interface BarcodeResult {readString: string, symbologyString: string, symbology: integer, goodRead: bool, xml: string, imageGraphics?:字符串,图片吗?:字符串};
成功扫描的结果以JavaScript对象的形式返回,其布局如上所示。图像是可选的,它取决于使能映像()API方法。
要让扫描器启动并运行,首先要做的就是调用loadScanner ()方法。
预计一个设备类型和一个回调函数作为第二个参数。这回调函数被包装在一个承诺中,并作为一个承诺返回。
/ * @return {const(string)操作:所采取的操作(将始终返回加载读取器)(String)结果:来自服务器(BOOL)状态的消息:如果加载读取器,则会返回true(字符串)err:字符串错误如果抛出错误(int)类型:我们连接到[0,1](字符串)的设备的类型:设备设备类型的名称[类型]} * /
设备类型参数可以是字符串常量,也可以是可能的值:
设备:[“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();});
要在加载读取器后连接它,我们需要使用连接.
cmbScanner.connect((回调));
/* @return (promise) {status: boolean,如果连接成功,则为true如果不是false err: string,如果状态为false err将不为null} */
/ **使用connect并将值作为承诺* / cmbscanner.connect()。然后(函数(connectionstate){console.log(connectionstate); // {“status”:false,“err”:“没有成功返回OK“}});/ **使用Connect并将值返回为回调函数* / cmbscanner.connect(函数(connectionstate){console.log(connectionstate);});
即使我们返回连接action对connect回调的结果进行操作,以更新DOM元素或调用只有在拥有连接集后才有效的API方法。
有一个侦听器回调(setConnectionStateDidChangeOfReaderCallback)可以设置的函数,只要连接状态发生变化,就会触发该函数,我们应该将代码保存在那里。
/* @return (promise) {status: boolean,如果连接成功,则为true如果不是false err: string,如果状态为false err将不为null} */
正如有连接(),有一个断开()对浮雕的方法连接():
cmbScanner.disconnect([回调])
类似于连接(),断开()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');}})
但是,就像连接(),我们不必这样做,因为setConnectionStateDidChangeOfReaderCallback ()这将侦听器设置为所有连接/断开/连接/断开事件。
为了处理成功的扫描结果,我们需要设置结果回拨函数。这是通过setResultCallback.
它为所有对象设置回调函数didReceiveReadResultFromReader事件。
cmbScanner.setResultCallback(函数(result){if(result&&result.readResults&&result.readResults.length>0){result.readResults.forEach(函数(项,索引){if(item.goodRead==true){//对条形码读取执行一些操作//示例:document.getElementById('content').insertAdjacentHTML('beforeed','div class=“result”>“+item.symbologysting+”:“+item.readString+”
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(函数(connectionState){if(connectionState==cmbScanner.CONSTANTS.CONNECTION_STATE_CONNECTED){//在连接时执行一些操作,例如将符号设置为enabled返回cmbScanner.setSymbologyEnabled(“SYMBOL.QR”,true)。然后(函数(rr){//有关rr的更多信息,请参阅setSymbologyEnabled)(返回结果)对象//设置符号后,我们可以发送一个命令。让我们在cmbScanner.sendCommand(“set LIGHT.INTERNAL-ENABLE ON”)上设置闪光灯。然后(函数(结果){//如果命令成功,我们应该在启动扫描过程时打开指示灯//并且为了检查闪光灯是否打开,我们可以使用isLightsOn API方法cmbScanner.isLightsOn()。然后(函数(lights_ON){//LIGHT should ON});});});
在这里,我们不仅要听连接/断开连接事件,但我们也启用了一些符号,并通过命令和API方法打开闪光灯isLightsOn.
如果我们想要监视扫描器(READER)的状态,我们需要设置这个回调函数。
cmbscanner.setActivestartArtScanningCallback(函数(Scannstate){if(scannstate == true){console.log('扫描仪工作');否则{console.log('扫描仪不起作用');}};
如前所述,设置此函数完全不需要在startscanning()或停止扫描()方法。
尽管让动作在承诺中返回或在之后立即回调似乎更合适startscanning()/停止扫描()被称为,由于性质stopScanning进程,它在每次有结果时发生,最好在同一位置侦听两个动作(启动和停止)。
要检查并要求允许使用相机,用于与移动设备扫描条形码。
/* @return (promise) {status: boolean,允许使用相机消息的状态:int,如果允许,则为1,否则为0}*/
启动/停止扫描过程,我们使用这两种方法。它们可以通过应用的UI从按钮中调用,也可以通过编程方式调用。
由于读者的性质,我们应该始终设置setActiveStartScanningCallback()函数,如果我们希望根据扫描仪(读卡器)的状态控制某些DOM元素。
cmbscanner . startscan (function(scannerState){if(scannerState) document.getElementById(' scannerState -active-label')[remove] = 'RUNNING';else document.getElementById('scanner-active-label')[deleted] = '已停止';});
启动扫描仪的按钮-->启动扫描仪的按钮-->停止扫描仪的按钮-->停止扫描仪的按钮-->“>Start scanner<!--按钮使用回调启动扫描仪,避免此操作,并始终使用setActiveStartScanningCallback-->
要从图像扫描条形码,我们可以使用Scanimage或ScanimageFrombase64。
/ * @返回(许诺){状态:布尔,图像扫描执行ERR的状态:串,如果状态假ERR将不能为空} * /
setSymbologyEnabled(symbol,on_off,[callback])/*@返回包含JSON对象的承诺{操作:调用的DMCC命令状态:是否成功,如果发生错误,将设置为false结果:如果符号已启用,则为true;如果未启用,则为false错误:如果操作未完成,则显示错误消息}*/
如何使用它的例子:
cmbScanner.setSymbologyEnabled( “SYMBOL.C93”,真实,功能(结果){执行console.log(JSON.stringify(结果)); //将打印{ “行动”: “SET SYMBOL.C93 ON”, “状态”:真, “结果”:真, “ERR”:空}});//或具有无极cmbScanner.setSymbologyEnabled( “SYMBOL.C93”,真)。然后(函数(结果){的console.log(JSON.stringify(结果)); //将打印{ “行动”:“SET SYMBOL.C93 ON”, “状态”:真正的 “结果”:真正的 “犯错”:空}});
要检查,如果我们有启用符号,我们使用isSymbologyEnabled ().
/ ** @return包含对象{action:调用的dmcc命令的承诺:它是否成功了,如果发生错误,它将设置为假结果:如果符号已启用,则为真,如果不是那么false err:如果操作没有完成,则错误消息} * /
cmbScanner.isSymbologyEnabled(“SYMBOL.C93”,function(rr){console.log(JSON.stringify(rr));//将打印{“action”:“GET SYMBOL.C93”,“status”:true,“err”:null,“result”:true});
要设置将摄像头设备用作条形码阅读器时摄像头的行为,请使用:
/**使用无瞄准器的相机。预览打开,照明可用。使用基本瞄准器(例如,StingRay)。预览关闭,照明不可用。被动瞄准器= 1,使用主动瞄准器(如MX-100)。预览关闭,照明可用。ACTIVE_AIMER = 2,使用移动设备前置摄像头。预览是打开的,照明不可用。Front_camera = 3 */
使用移动设备相机时,这控制预览/扫描选项。多个选项可以在一起或在一起。
/** *使用默认值(没有覆盖)。*/ "DEFAULTS": 0, /** *禁用缩放功能(从预览中删除缩放按钮)。*/ "NO_ZOOM_BTN": 1, /** *禁用照明(删除照明按钮从预览)。*/ "NO_ILLUM_BTN": 2, /** *开启模拟硬件触发(音量下降按钮)。*/ "HARDWARE_TRIGGER": 4, /** *当扫描开始时,预览显示,但解码暂停,直到触发器(要么屏幕上的按钮或音量下降按钮,如果启用)被按下。*/ "PREVIEW_PAUSED": 8, /** *强制显示预览,即使默认关闭(例如,当使用kCDMCameraModePassiveAimer或kCDMCameraModeActiveAimer)。*/ "PREVIEW_ALWAYS_SHOW": 16, /** *如果设备支持,请使用更高的分辨率。默认值是1280x720,这个参数将使用1920x1080。*/ "HIGH_RESOLUTION": 64, /** *如果设备支持,使用更高的帧速率。默认是30帧,这个参数将使用60帧。 */ "HIGH_FRAME_RATE" : 128, /** * Show close button in partial view. */ "SHOW_CLOSE_BUTTON" : 256, /** * Keep the preview in paused state after read or timeout. */ "KEEP_PREVIEW_IN_PAUSED_STATE" : 512
/* @params x,y,w,h x,y:左上角位置w,h:矩形的宽度和高度(占整个容器的百分比)*/
cmbscanner.setPreviewContainerPositionAndsize(0,0,100,50);//将预览设置为0,0和100%宽度50%高度
仅适用于iOS的,仅适用于相机的读者。
将摄影机预览部分视图顶轴设置为从与Androids行为匹配的状态栏下方开始。它需要一个布尔参数。
cmb.setPreviewContainerBelowStatusBar(真正的);cmb.setPreviewContainerPositionAndSize ([0, 0100, 50]);//将设置预览为0,0和100%宽50%高。//在iOS上,部分视图将显示在状态栏下面。
cmb.setPreviewContainerBelowStatusBar(假);cmb.setPreviewContainerPositionAndSize ([0, 0100, 50]);//将设置预览为0,0和100%宽50%高。//在iOS上,部分视图将从屏幕顶部开始,并将重叠状态栏。
设置相机叠加模式。您需要在调用loadScanner之前执行此操作,否则它将无法正常工作。
仅在MX-Mobile上提供。
阅读更多关于覆盖模式的更多信息这里
cmb.setPreviewOverlayMode (cmb.CONSTANTS.PREVIEW_OVERLAY_MODE.OM_CMB);
设置应用程序UI更改方向时扫描会话是否应停止。它需要一个布尔参数。
CMB.SetStopscannerOnotate(真实);
使用移动相机扫描时,在相机预览上方显示或隐藏消息。
以编程方式启用闪光灯的光,我们可以使用:
/**@return一个包含JSON对象{(string)操作的承诺:被调用的DMCC命令(bool)状态:是否成功,如果发生错误,它将被设置为false(string)err:如果操作未完成,错误消息(bool)结果:所采取操作的结果,在本例中,如果灯光已启用,则为TRUE;如果未启用,则为false}*/
cmbScanner.setLightsOn(真,功能(响应){//console.log(response);});cmbScanner.setLightsOn(真)。然后(函数(响应){//或承诺,回调函数是一个承诺内包裹//所以如果我们不设置一个回调函数作为PARAM,默认的会使用//它会返回一个承诺继续链});
要检查闪光灯是否亮,我们可以使用:
/**@return一个包含JSON对象{(string)操作的承诺:被调用的DMCC命令(bool)状态:是否成功,如果发生错误,它将被设置为false(string)err:如果操作未完成,错误消息(bool)结果:所采取操作的结果,在本例中,如果灯光已启用,则为TRUE;如果未启用,则为false}*/
cmbScanner.isLightsOn(真的,函数(响应){/ / console.log(响应);});cmbScanner.isLightsOn(true).then(function(response){//或者带有承诺的回调函数被包装在一个承诺中//所以如果我们不设置一个回调函数作为参数,将使用默认的一个回调函数//它将返回一个承诺来继续链});
如果我们想返回我们使用的解码器看到的最后一个图像enableImage().如果我们想要使用返回图像的图像统计enableImageGraphics()。
cmbScanner.enableImage(真正的);//它将在结果中启用图像cmbScanner.enableImageGraphics(true);//将显示在图像上检测到的条形码的确切位置
条形码结果对象的结构是:
interface BarcodeResult {readString: string, symbologyString: string, symbology: integer, goodRead: bool, xml: string, imageGraphics?:字符串,图片吗?:字符串};
启用或禁用扫描条形码的解析。需要一个cmb.CONSTANTS.PARSERS类型的参数。
cmb.setParser (cmb.CONSTANTS.PARSERS.GS1);
设置读取结果类型的编码。期待CMB.Constants.ReadString_Encoding类型的一个参数。
cmb.setReadStringEncoding(cmb.CONSTANTS.ReadStringEncoding.UTF_8);
大多数API方法都可以替换为只向MX(或摄像头)读取器发送适当的命令。
Send命令接收回调并将其包装成承诺,这样链就可以继续。
使用
cmbScanner。sendCommand(“设置标志。POSTNET OFF") .then(function(result){//在promise中让我们看看我们的命令做了什么});//类似cmbScanner。sendCommand(“光。then(function(result){//如果命令成功,当我们启动扫描进程时,应该将LIGHT打开。});
第一个命令将禁用符号邮政网.第二个将设置闪光灯开。
这两种操作都可以通过相应的API函数执行SetyymbologyEnabled()和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”)。然后(函数(响应){//这将调用USER1的存储设置项,因此MX设备基本上会发出两次嘟嘟声,并伴有红色LED和振动})
仅适用于iOS系统。
拥有和运营多个康耐视移动终端的公司可能希望远程收集有关电池电量、电池运行状况、已安装固件等的最新信息。
使用CMBSDK框架的IOS应用程序可以将附加的移动终端的状态信息报告给MDM实例。可以使用leasemdmreporting的方法启用,该方法接受一个布尔参数。
有关MDM报告的更多信息可以找到这里
cmb.setmdmreportingEnabled(true);
仅适用于iOS系统。
用于创建用于MDM报告的身份验证凭据。它包含四个字符串参数:用户名、密码、clientID和clientSecret。
应在setMDMReportingEnabled之前调用。
有关MDM报告的更多信息可以找到这里
招商银行。createMDMAuthCredentials("username", "password", "clientID", "clientSecret");
如果我们需要重新设置MX/摄像头读取器的配置,我们可以使用:
cmbScanner.resetConfig(函数(结果){console.log(结果);})
/ * @返回一个承诺,包含JSON对象{(串)动作:这是调用(布尔)状态DMCC命令:没有它成功与否,如果发生错误,将被设置为false(字符串)错误:在错误消息,如果动作没有完成并且有错误。缺省为空(布尔)结果:在sendCommand动作的结果} * /
要查看您当前使用的是什么版本cmbSDK:
/** @return包含cmbSDK版本字符串的承诺{(string) version: cmbSDK版本}*/
获取相机曝光补偿范围。
返回成功的返回范围为JSON对象的回调,或返回错误回调,如果出现错误,返回错误消息。
cmbScanner.getCameraExposureCompensationRange(函数(范围){//范围是具有这些属性// JSON对象“下”:分相机曝光值//“上”:最大相机曝光值//“步骤”:相机曝光步骤值控制台。日志(JSON.stringify(范围));},函数(误差){的console.log(误差);});
注:相机需要在cmbSDK内至少启动一次,以获得相机曝光补偿范围。
设置相机曝光补偿值。发送将被设置为曝光补偿的浮点值。
cmbscanner.setcameraexpoosurecompensation(5,函数(错误){console.log(错误);});
注:这需要在成功连接到阅读器设备后调用。如果发送值大于相机曝光最大值,则设置最大值,如果发送值小于相机曝光最小值,则设置最小值。