这些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上构建
为了离子的解决方案:
#安装离子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会用星号字符随机替换扫描结果中的字符)。
联系您的Cognex销售代表,了解如何获得许可证密钥,包括可用于评估SDK 30天的试用许可证。
安卓系统,获取许可证密钥后,在应用程序的AndroidManifest.xml文件中的应用程序标记下添加以下行:
接下来,将密钥放在您的\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设备是一个硬件扫描仪,还有一个智能手机摄像头。
设备:[“设备类型”\u MX\u 1000、“设备类型”\u移动设备”],设备友好:[“MX设备”、“摄像头”],
有两种类型的触发器,但有六个值是保留的。为MANUAL_TRIGGER设置,一旦在扫描过程中发现条形码,扫描仪将自动停止进一步扫描。对于CONTINUOUS_TRIGGER它将继续查找条形码,并在每次找到条形码时触发事件。
TRIGGER_TYPES : ["",""," MANUAL_TRIGGER”、“”、“”、“CONTINUOUS_TRIGGER”),
Availability_unknown: 0, availability_available: 1, availability_unavailable: 2,
当我们监控读卡器设备(摄像头或MX)的连接状态时setConnectionStateDidChangeOfReaderCallback可以得到下列整数值之一,可以通过常数对象
connection_state_disconnect: 0, connection_state_connecting: 1, connection_state_connected: 2, connection_state_disconnect: 3,
开发人员可以访问以下摄像头模式:
摄像头模式:[“无摄像头”、“被动摄像头”、“主动摄像头”、“前摄像头”]
开发人员可以访问以下预览覆盖模式:
预览覆盖模式:[“OM_CMB”、“OM_LEGACY”],
一份可用的符号和我们的扫描仪一起使用。
参考维基页面附录A Camera Reader的DMCC的更多信息符号.
符号:{“SYMBOL.UNKNOWN”:0,“SYMBOL.DATAMATRIX”:1,“SYMBOL.QR”:2,“SYMBOL.C128”:3,“SYMBOL.UPC-EAN”:4,“SYMBOL.C11”:5,“SYMBOL.C39”:6,“SYMBOL.C93”:7,“SYMBOL.I2O5”:8,“SYMBOL.CODABAR”:9,“SYMBOL.EAN-UCC”:10,“SYMBOL.PHARMACODE”:11,“SYMBOL.MAXICODE”:12,“SYMBOL.PDF417”:13,“SYMBOL.MICROPDF417”:14,“SYMBOL.DATABAR”:15,“SYMBOL.POSTNET”:16,“SYMBOL.PLANET”:17,“SYMBOL.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对象中,其布局如上图所示。图像是可选的,它取决于enableImage() API方法。
要启动并运行扫描仪,首先要做的是调用loadScanner ()方法。
预计一个设备类型和回拨函数作为第二个参数。的回拨函数被包装在Promise中,并作为Promise返回。
/*@return{const(string)action:thetaked action(willways return LOAD READER)(string)result:the message from the server(bool)status:如果已加载读卡器,它将返回true(string)err:the string error if a error when the error when fault(int)type:我们连接到[0,1]的设备的类型(string)名称:设备类型的名称设备[type]}*/
设备类型参数可以是字符串常量,取值如下:
设备:[“设备类型\u MX\u 1000”、“设备类型\u移动设备”]
或者我们可以只传递0表示设备类型,传递1表示设备类型,传递1表示移动设备
//回调示例:cmbScanner.loadScanner(“设备类型移动设备”,函数(结果){cmbScanner.connect();})//例如Promise cmbScanner.loadScanner(“设备\类型\移动\设备”)。然后(函数(结果){cmbScanner.connect();})//将设备类型作为整数cmbScanner.loadScanner(0)传递的示例(函数(结果){cmbScanner.connect();});
要在加载读取器后连接它,我们需要使用连接.
.connect([callback]);
/*@return(promise){status:boolean,if connection succeed true if not false err:string,if status false err not null}*/
/**使用connect并将值作为承诺返回*/cmbScanner.connect()。然后(函数(connectionState){console.log(connectionState);//{“status”:false,“err”:“未在成功时返回OK”}});//**使用connect并将值作为回调函数返回*/cmbScanner.connect(函数(connectionState){console.log(connectionState);});
即使我们返回连接不建议对连接回调的结果执行操作,以更新DOM元素或调用只有在建立连接集后才起作用的API方法。
有一个监听器回调(setConnectionStateDidChangeOfReaderCallback)可以设置的函数,只要连接状态发生变化,就会触发该函数,我们应该将代码保存在那里。
/*@return(promise){status:boolean,if connection succeed true if not false err:string,if status false err not 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 ()这将侦听器设置为所有连接/断开/连接/断开事件。
要处理成功的扫描结果,我们需要设置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(function(availability){/***availability-设备可用性的int表示形式*/if(availability==CONSTANTS.availability\u UNKNOWN){//在设备可用性未知时执行一些操作}否则if(availability==CONSTANTS.availability\u availability){//在设备可用时执行一些操作}否则如果(可用性==常量。可用性{不可用){//在设备不可用时执行一些操作});
所有连接/断开连接事件应在使用此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.
启动/停止扫描过程,我们使用这两种方法。它们可以通过应用的UI从按钮中调用,也可以通过编程方式调用。
由于读者的性质,我们应该始终设置setActiveStartScanningCallback()函数,如果我们想根据扫描器(Reader)的状态来控制某些DOM元素。
cmbscanner . startscan (function(scannerState){if(scannerState) document.getElementById(' scannerState -active-label')[remove] = 'RUNNING';else document.getElementById('scanner-active-label')[deleted] = '已停止';});
启动扫描仪启动扫描仪的按钮-->停止扫描仪按钮停止扫描仪-->启动扫描仪<!-按钮启动带有回调的扫描仪,避免此操作,并始终使用setActiveStartScanningCallback-->
如果我们想要监视扫描器(READER)的状态,我们需要设置这个回调函数。
cmbScanner.setActiveStartScanningCallback(函数(scannerState){if(scannerState==true){console.log('scanner is working');}否则{console.log('scanner is not working');});
如前所述,设置此函数完全不需要在开始扫描()或stopScanning ()方法。
尽管看起来更合适的做法是在承诺或之后立即回调中返回该操作开始扫描()/stopScanning ()被称为,由于性质stopScanning进程,它在每次有结果时发生,最好在同一位置侦听两个动作(启动和停止)。
setSymbologyEnabled(symbol,on_off,[callback])/*@返回包含JSON对象的承诺{操作:调用的DMCC命令状态:是否成功,如果发生错误,将设置为false结果:如果符号已启用,则为true;如果未启用,则为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 ().
/**@返回包含对象{操作:调用的DMCC命令状态:是否成功,如果发生错误,则将设置为false结果:如果符号已启用,则为true;如果未启用,则为false错误:如果操作未完成,则显示错误消息}*/
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 */
/* @params x,y,w,h x,y:左上角位置w,h:矩形的宽度和高度(占整个容器的百分比)*/
cmbScanner.setPreviewContainerPositionAndSize(0,0100,50)//将预览设置为0,0和100%宽度50%高度
要以编程方式启用闪光灯,我们可以使用:
/**@return一个包含JSON对象{(string)操作的承诺:被调用的DMCC命令(bool)状态:是否成功,如果发生错误,它将被设置为false(string)err:如果操作未完成,错误消息(bool)结果:所采取操作的结果,在本例中,如果灯光已启用,则为TRUE;如果未启用,则为false}*/
cmbScanner.setLightsOn(真的,函数(响应){/ / console.log(响应);});cmbScanner.setLightsOn(true).then(function(response){//或者带有承诺的回调函数被包装在一个承诺中//所以如果我们不设置一个回调函数作为参数,将使用默认的一个回调函数//它将返回一个承诺来继续链});
要检查闪光灯是否亮,我们可以使用:
/**@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?:字符串,图片吗?:字符串};
大多数API方法都可以用向MX(或Camera)读取器发送适当的命令来代替。
Send命令接收回调并将其封装到承诺中,这样链就可以继续。
使用
然后(函数(结果){//在承诺中,让我们看看我们的命令在console.log(JSON.stringify(result));})//或者类似于这个cmbScanner.sendCommand(“SET LIGHT.INTERNAL-ENABLE ON”)。然后(函数(result){//如果命令成功,我们应该在启动扫描进程console.log(JSON.stringify(result));});
第一个命令将禁用符号邮政网.第二个按钮将设置Flash ON。
这两种操作都可以通过相应的API函数执行setSymbologyEnabled()和setLightsOn ()一般来说,开发人员应该总是倾向于使用API函数sendCommand()。
然而,在某些情况下,Cordova插件并不涵盖特定的用例场景,我们可以始终使用sendCommand的。
如果我们想要改变MX设备“哔哔声”和“灯光”的方式,我们可以使用:
行动 | 命令 | 参数 | 参数值 | 参数的描述 | 产生的作用 |
---|---|---|---|---|---|
设置|获取 |
输出。用户配置 |
事件号码,嘟嘟声,嘟嘟声号码,LED颜色,振动 |
[1,2] [0-2] [0-3] [0-7] [on | off] |
1:用户事件1,2:用户事件2 |
设置USER_EVENT_1或USER_EVENT_2的鸣笛音和鸣笛次数。 |
所以对于我们的例子,我们有:
cmbScanner.sendCommand(“setoutput.USER-configure1 1 2 4 ON”)。然后(函数(响应){//console.log(响应);//打印操作结果});
这将用户事件#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动作的结果}*/