这些wiki页面的目的是提供应用程序的API方法的详细描述科尔多瓦实现cmbSDK的插件。
JavaScript方面的插件是作为一个插件实现的JS.文件,可以在万维网您的文件夹科尔多瓦应用程序。
在插件文件夹中,我们还提供了一个示例文件夹,它基本上是三个文件,可以复制到您的JS / index.js CSS / index.css和index.html你的项目和一个cmbconfig.js文件,该文件将自动复制到/js文件夹,当插件安装时。
它还特别涵盖了其他实现离子混合应用方法基于SAP /菲奥里站台
来创建一个很棒的应用程序科尔多瓦,我们首先需要创建一个与科尔多瓦启动器:
//例如:/Users/superUser/cmb-cordova-master cordova platform add android //cordova platform add ios //如果你想在ios上构建
为了离子解决方案:
#安装ionic sudo npm install-g cordova ionic#启动带有选项卡的ionic应用程序布局ionic启动Aweasome ionic应用程序选项卡cd Aweasome ionic应用程序#添加我们的插件ionic cordova插件添加/WORKPLACE/PLUGINS/cmb cordova//解压我们插件的路径#添加平台ionic cordova平台添加android@7.0.0brew更新和brew安装gradle#看见https://gradle.org/install/ //要直接从控制台构建,需要更改gradlew文件sudo chmod 755/Users/**/platforms/android/gradlew//的权限,也需要ionic-native npm安装ionic-native--save//将在android上运行实时刷新和控制台日志ionic cordova运行android-l-c
这将创建一个应用程序。开发人员需要熟悉开发的过程科尔多瓦.有一些怪癖,比如iOS想要签名配置文件,还是安卓将投诉清单文件。
一旦有一个科尔多瓦在所需平台上构建的应用程序中,我们可以添加我们的Cognex解决方案。
在科尔多瓦插件文件夹从示例文件夹我们需要复制index.html进入站台万维网文件夹这个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文件中的应用程序标记下添加以下行:
<元数据android: name = " MX_MOBILE_LICENSE " android: value = " YOUR_MX_MOBILE_LICENSE " / >
接下来,将密钥放在您的\u MX\u MOBILE\u许可证的位置。
<类别android:name =”android.intent.category.launcher“/> 意图 - 过滤器> Activity> <元数据和谐:name =“mx_mobile_license”android:value =“g / 9ytjzcja + sxt4dtedxr4hp6szh9bml97vux + ee9uy =”/> application>
ios -获取许可证密钥后,将其作为字符串添加到应用程序的Info.plist文件中的密钥下MX_MOBILE_LICENSE.
开发者可以使用的常量列表如下:
你可以使用两种类型的设备科尔多瓦插件。MX设备是一个硬件扫描仪,还有一个智能手机摄像头。
设备:[“设备类型”\u MX\u 1000、“设备类型”\u移动设备”],设备友好:[“MX设备”、“摄像头”],
有两种类型的触发器,但有六个值是保留的。为MANUAL_TRIGGER设置,一旦在扫描过程中发现条形码,扫描仪将自动停止进一步扫描。对于CONTINUOUS_TRIGGER它将继续寻找条形码,并在每次找到条形码时触发事件。
TRIGGER_TYPES : ["",""," MANUAL_TRIGGER”、“”、“”、“CONTINUOUS_TRIGGER”),
可用性_kunkown:0,可用性_Available:1,可用性_不可应用:2,
当我们监视READER设备(摄像头或MX)的连接状态setConnectionStateDidChangeOfReaderCallback我们可以通过常数对象
connection_state_disconnect: 0, connection_state_connecting: 1, connection_state_connected: 2, connection_state_disconnect: 3,
开发人员可以访问以下摄像头模式:
摄像头模式:[“无摄像头”、“被动摄像头”、“主动摄像头”、“前摄像头”]
开发者可以访问以下预览覆盖模式:
预览覆盖模式:[“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对象中,其布局如上图所示。图像是可选的,它取决于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();});
要在加载后连接到READER,我们需要使用连接.
.connect([callback]);
/* @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);});
即使我们返回的结果连接不建议对连接回调的结果执行操作,以更新DOM元素或调用只有在建立连接集后才起作用的API方法。
有一个监听器回调(setConnectionStateDidChangeOfReaderCallback)可以设置的函数,它总是会触发每当连接状态发生变化时我们应该把代码保留在那里。
/* @return (promise) {status: boolean,如果连接成功,则为true如果不是false err: string,如果状态为false err将不为null} */
正如有connect (),有一个断开()方法,该方法对connect ():
cmbScanner.断开连接([回调])
类似于connect (),断开()TOO返回回调函数(包裹到承诺)中的连接状态,我们可以在ConnectionState上采取行动,例如将标签从“已连接”更改为“已断开连接”:
cmbscanner.disconnect(函数(connectionstate){if(connectionstate == cmbscanner.constants.connection_state_disconnected){document.getElementById('某个标签')。innerhtml('已断开连接');否则if(connectionstate == cmbscanner.canstants。connection_state_connected){document.getElementById('某个标签')。innerhtml('断开连接');}})
但是,就像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方法设置的回调函数内处理。
回调是可选的,因为插件提供了一个处理连接/断开连接事件,但默认的回调只是一个占位符函数,并没有为应用程序的最终开发者提供太多的功能。
当连接状态改变激发时,它将返回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方法启用一些符号并打开闪光灯伊斯莱特森.
如果我们想监控扫描仪(读卡器)的状态,我们需要设置这个回调函数。
cmbScanner.setActiveStartScanningCallback(函数(scannerState){if(scannerState==true){console.log('scanner is working');}否则{console.log('scanner is not working');});
如前所述,设置此函数完全不需要在开始扫描()或stopScanning ()方法。
尽管看起来更合适的做法是在承诺或之后立即回调中返回该操作开始扫描()/stopScanning ()被称为,由于本质停止扫描进程,它在每次有结果时发生,最好在同一位置侦听两个动作(启动和停止)。
检查并请求许可使用摄像头使用移动设备扫描条形码。
/ * @return(promise){status:boolean,使用相机消息的权限状态:int,1如果可以请求权限,否则为0} * /
启动/停止扫描过程,我们使用这两种方法。它们可以通过应用的UI从按钮中调用,也可以通过编程方式调用。
由于读者的性质,我们应该始终设置setActiveStartScanningCallback ()函数,如果我们想根据扫描器(Reader)的状态来控制某些DOM元素。
cmbscanner . startscan (function(scannerState){if(scannerState) document.getElementById(' scannerState -active-label')[remove] = 'RUNNING';else document.getElementById('scanner-active-label')[deleted] = '已停止';});
< a href = " cmbScanner.startScanning ();" < / > < >开始扫描仪!--button to start the scanner --> Stop Scanner Start Scanner
要从图像扫描条形码,我们可以使用scanImage或scanImageFromBase64。
/*@return(promise){status:boolean,图像扫描执行状态err:string,如果status false err将不为null}*/
setSymbologyEnabled(象征,on_off(回调))/ * @return承诺包含JSON对象{行动:DMCC命令调用状态:它成功与否,如果一个错误发生,它将被设置为false结果:如果启用了象征那么真,如果不是那么假犯错:错误消息如果操作没有完成}* /
如何使用它的例子:
cmbScanner.setSymbologyEnabled(“SYMBOL.C93”,true,函数(结果){console.log(JSON.stringify(result));//将打印{“操作”:“SET SYMBOL.C93 ON”,“status”:true,“result”:true,“err”:null})//或者使用Promise cmbScanner.setSymbologyEnabled(“SYMBOL.C93”,true)。然后(函数(结果){console.log(JSON.stringify(result));//将打印{“操作”:“SET SYMBOL.C93 ON”,“status”:true,“result”:true,“err”:null});
为了检查是否启用了符号,我们使用IssymbologyEnabled().
/ * * @return承诺包含对象{行动:DMCC命令调用状态:它成功与否,如果发生了一个错误就会设置为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 */
这将控制使用移动设备相机时的预览/扫描选项。可以将多个选项组合在一起。
/***使用默认值(无覆盖)。*/“默认值”:0,/***禁用缩放功能(从预览中删除缩放按钮)。*/“无缩放”:1,/***禁用照明(从预览中删除照明按钮)。*/“NO_ILLUM_BTN”:2,/***启用模拟硬件触发器(音量下降按钮)。*/“硬件触发”:4,/***扫描开始时,显示预览,但解码暂停,直到按下触发按钮(屏幕上按钮或音量下降按钮,如果启用)。*/“预览已暂停”:8,/***强制显示预览,即使默认情况下处于关闭状态(例如,使用kCDMCameraModePassiveAimer或kCDMCameraModeActiveAimer时)。*/“预览总是显示”:16,/***如果设备支持,请使用更高的分辨率。默认值为1280x720,将使用此参数1920x1080。*/“高分辨率”:64,/***如果设备支持,请使用更高的帧速率。默认值为30 FPS,此参数将使用60 FPS。*/“高帧率”:128,/***在部分视图中显示关闭按钮。*/“显示关闭按钮”:256
/ * @params x,y,w,h x,y:左左位置w,h:矩形的宽度和矩形的完整容器的前一个* /
cmbScanner.setPreviewContainerPositionAndSize(0,0100,50)//将预览设置为0,0和100%宽度50%高度
仅在iOS上可用,仅适用于照相机读取器。
设置摄像头预览部分视图顶部轴开始下方的状态栏匹配的android行为。它需要一个布尔参数。
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.SetstopCanneRotate(真);
使用移动相机扫描时,在相机预览上方显示或隐藏消息。
要以编程方式启用闪光灯,我们可以使用:
/**@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(response);});cmbscanner.islightson(true).then(函数(response){//或承诺,回调函数在承诺//内包裹,因此如果我们没有将回调函数设置为param,则默认值将是使用//它将返回一个继续链的承诺};
如果我们想返回我们使用的解码器看到的最后一个图像enableImage (). 如果我们想在返回的图像上使用图像图形统计信息enerialImageGraphics()。
cmbScanner.enableImage(真正的);//它将在结果中启用图像cmbScanner.enableImageGraphics(true);//将显示在图像上检测到的条形码的确切位置
条形码结果对象的结构为:
interface BarcodeResult {readString: string, symbologyString: string, symbology: integer, goodRead: bool, xml: string, imageGraphics?:字符串,图片吗?:字符串};
启用或禁用对扫描条形码的解析。期望一个cmb.CONSTANTS.PARSERS类型的参数。
setParser(cmb.CONSTANTS.PARSERS.GS1);
设置readString结果类型的编码。需要一个cmb.CONSTANTS.READSTRING_ENCODING类型的参数。
cmb.setReadStringEncoding (cmb.CONSTANTS.READSTRING_ENCODING.UTF_8);
大多数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设备“哔哔声”和“灯光”的方式,我们可以使用:
行动 | 命令 | 参数 | 参数值 | 参数描述 | 结果行动 |
---|---|---|---|---|---|
套装|获取 |
输出。用户配置 |
事件号码,嘟嘟声,嘟嘟声号码,LED颜色,振动 |
[1,2] [0-2] [0-3] [0-7] [on | off] |
1: user_event_1, 2: user_event_2 |
设置“用户\事件\ 1”或“用户\事件\ 2”的蜂鸣声和蜂鸣声次数。 |
所以对于我们的例子,我们有:
cmbScanner。sendCommand(“设置输出。USER-CONFIGURE1 1 2 4 ON").then(function(response){ //console.log(response); //print out the result of the action });
这将使用红色LED和振动将用户事件#1配置为两个蜂鸣声。要激活此事件,我们使用:
cmbScanner.sendCommand("OUTPUT.USER1").then(function(response){//这将调用USER1的存储设置项,所以MX设备将基本哔哔两次红色LED和振动})
仅适用于iOS系统。
拥有和运营多个康耐视移动终端的公司可能希望远程收集有关电池电量、电池运行状况、已安装固件等的最新信息。
使用cmbSDK框架的iOS应用可以将附加的移动终端状态信息上报给MDM实例。这可以通过setMDMReportingEnabled方法启用,该方法接受一个布尔参数。
有关MDM报告的更多信息,请参见在这里
cmb.setMDMReportingEnabled(true);
仅适用于iOS系统。
用于创建用于MDM报告的身份验证凭据。它接受四个字符串参数:用户名、密码、clientID和clientSecret。
应该在setMDMReportingEnabled之前调用。
有关MDM报告的更多信息,请参见在这里
招商银行。createMDMAuthCredentials("username", "password", "clientID", "clientSecret");
如果我们需要重新设置MX/摄像头读取器的配置,我们可以使用:
cmbScanner.resetConfig(函数(结果){console.log(结果);})
/*@return A promission包含JSON对象{(字符串)操作:已调用的DMCC命令(bool)状态:是否成功,如果发生错误,将设置为false(字符串)err:如果操作未完成且存在错误,则显示错误消息。默认值为null(bool)result:sendCommand操作的结果}*/
要查看你目前使用的cmbSDK版本:
/** @return包含cmbSDK版本字符串的承诺{(string) version: cmbSDK版本}*/