这些wiki页面的目的是提供API方法的详细描述科尔多瓦实现cmbSDK的插件。
插件在JavaScript方面的东西,是作为一个实现的js可在中找到的文件www你的文件夹科尔多瓦应用程序。
在插件文件夹,我们也提供了样本文件夹,这基本上是可以复制到三个文件的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上构建
为离子的解决方案:
#安装离子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 Mobile终端),则SDK需要安装许可证密钥。如果没有许可证密钥,则SDK仍将运行,尽管扫描结果将被混淆(SDK将随机替换扫描结果中的字符与星号字符)。
请与您的康耐视销售代表联系,了解如何获取许可密钥,包括可用于评估SDK 30天的试用许可。
获得许可密钥后,在应用程序的AndroidManifest.xml文件的application标签下添加以下行:
<元数据机器人:名称= “MX_MOBILE_LICENSE” 机器人:值= “YOUR_MX_MOBILE_LICENSE”/>
接下来,将您的密钥放在YOUR_MX_MOBILE_LICENSE的位置。
<应用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"> < /应用程序>
开发者可以使用的常量列表如下:
有两种类型的设备可用于此科尔多瓦插入。作为硬件扫描仪的MX设备和智能手机相机。
设备:["DEVICE_TYPE_MX_1000","DEVICE_TYPE_MOBILE_DEVICE"], DEVICES_FRIENDLY: ["MX Device","Camera"],
有两种类型的触发器,但保留了六个值。为了MANIAL_TRIGGER.设定,一旦条形码在扫描过程中发现,扫描仪会自动停止进一步的扫描。为了CONTINUOUS_TRIGGER它将继续寻找条形码,并在每次找到条形码时触发事件。
trigger_types:[“”,“,”manual_trigger“,”“,”,“continue_trigger”,
Availability_unknown: 0, availability_available: 1, availability_unavailable: 2,
当我们监视读取器设备的连接状态(或者摄像机或MX)与setConnectionStatedIdChangeOfReaderCallback.可以得到下列整数值之一,可以通过常量目的
connection_state_disconnected:0,connection_state_connecting:1,connection_state_connected:2,connection_state_disconnecting:3,
开发人员可以访问下列相机模式:
CAMERA_MODES:[ “NO_AIMER”, “PASSIVE_AIMER”, “ACTIVE_AIMER”, “FRONT_CAMERA”]
可用的列表象征和我们的扫描仪一起使用
请参阅wiki页面附录A相机阅读器的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对象与上文所示的布局被返回。该图像是可选的,它取决于验证() API方法。
要启动并运行扫描仪,首先要做的是调用loadScanner ()方法
预计一个设备类型和一个回调函数作为第二个参数回调函数在承诺中包裹,它返回为一个。
/ * @返回{常量(串)动作:将采取的行动(总是返回LOAD READER)(字符串)结果:从服务器(布尔)消息状态:如果读者被加载,它将返回true(字符串)错误:串错误,如果错误被抛出(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();});
要在加载后连接到READER,我们需要使用连接.
cmbScanner.connect((回调));
/ * @返回(承诺){状态:布尔,如果不是假的故障如果连接succeded真:字符串,如果状态虚假ERR将不能为null} * /
/ **使用Connect和返回值作为一个承诺* / cmbScanner.connect(),然后(函数(connectionState){执行console.log(connectionState); // { “地位”:假的, “犯错”:“没返回成功”}})确定;/ **使用连接和返回值作为回调函数* / cmbScanner.connect(函数(connectionState){的console.log(connectionState);});
即使我们返回连接action对connect回调的结果进行操作,以更新DOM元素或调用只有在拥有连接集后才有效的API方法。
有一个倾听者回调(setConnectionStatedIdChangeOfReaderCallback.)可以设置的函数,它总是会触发每当连接状态发生变化时我们应该把代码保留在那里。
/ * @返回(承诺){状态:布尔,如果不是假的故障如果连接succeded真:字符串,如果状态虚假ERR将不能为null} * /
正如有connect (),有一个断开连接()方法,做的opossiteconnect ():
cmbScanner.断开连接([回调])
类似于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 ()这将侦听器设置为所有连接/断开/连接/断开事件。
为了处理成功的扫描结果,我们需要设置RESULTSCALLBALL.函数。这是通过setResultCallback.
它为所有人设置回调函数DidReceivedResultFromReader事件。
cmbscanner.setresultCallback(函数(结果){if(结果.SymbologyString =='否读取'){//在没有读取条形码时执行某些操作或只是将其留空// navigator.notification.alert(“停止”);}否则如果(结果&& result.readstring){//对条形码读取//示例执行一些操作:document.getElementById('内容')。InsternAdjententhtml('之前',' '+结果.SyybologyString +' span>:'+结果.ReadString +' div>'); //我们可以将所有这个DOM处理在DOM帮助器对象中处理,但由于它只是一行代码让我们离开它是}});
ResultCallback将在每次进行条形码扫描时触发(或手动停止扫描仪,或在没有结果的情况下停止扫描仪)。
结果对象
条码结果的结构如下:
interface BarcodeResult {readString: string, symbologyString: string, symbology: integer, goodRead: bool, xml: string, imageGraphics?:字符串,图片吗?:字符串};
要监控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(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 . startscan (function(scannerState){if(scannerState) document.getElementById(' scannerState -active-label')[remove] = 'RUNNING';else document.getElementById('scanner-active-label')[deleted] = '已停止';});
< a href = " cmbScanner.startScanning ();" < / > < >开始扫描仪!——按钮启动扫描——> < >停止扫描仪!——button来停止扫描仪——> < >开始扫描仪!——button以回调启动扫描器,避免此操作,并始终使用setActiveStartScanningCallback——>
如果我们想要监视扫描器(READER)的状态,我们需要设置这个回调函数。
cmbScanner.setActiveStartScanningCallback(函数(scannerState){如果(scannerState ==真){执行console.log( '扫描工作');}其他{的console.log( '扫描仪无法操作');}});
如前所述,设置此函数完全不需要在startScanning()或stopscanning()方法。
尽管它可能看起来更适合于只在一个承诺,行动回报或后立即回调startScanning()/stopscanning()被称为,由于性质stopScanning进程,它在每次有结果时发生,最好在同一位置侦听两个动作(启动和停止)。
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}});//或使用承诺cmbScanner.setSymbologyEnabled(“SYMBOL.C93,true”);然后(函数(result){console.log(JSON.stringify(result));//将打印{”操作“:“将SYMBOL.C93设置为ON”,“状态”:true,“结果”:true,“错误”:null});
为了检查是否启用了符号,我们使用isSymbologyEnabled ().
/ ** @返回一个承诺,包含对象{行动:这是调用的状态DMCC命令:没有它成功与否,如果发生错误,将其设置为false结果:如果符号已启用则为true,如果没有那么假错误:错误消息,如果动作没有完成} * /
cmbScanner.isSymbologyEnabled(“SYMBOL.C93函数(rr) {console.log (JSON.stringify (rr));//将打印{"action": "GET SYMBOL. "C93”、“地位”:真的,“犯错”:空,“结果”:真正}});
当我们使用摄像头设备作为条形码阅读器时,设置摄像头的行为方式:
/ **使用没有Aimer的相机。预览是打开的,照明可用。no_aimer = 0,用基本瞄准器使用相机(例如,Stingray)。预览关闭,不可用照明。passive_aimer = 1,使用带有活跃的Aimer(例如,MX-100)的相机。预览关闭,照明可用。active_aimer = 2,使用移动设备前置摄像头。预览是开启的,不可用的照明。front_camera = 3 * /
/* @params x,y,w,h x,y:左上角位置w,h:矩形的宽度和高度(占整个容器的百分比)*/
cmbScanner.setPreviewContainerPositionAndSize(0,0,100,50);//将设置预览0,0和100%的宽度50%的高度
要以编程方式启用闪光灯,我们可以使用:
/ * * @return承诺包含JSON对象{(string)行动:DMCC命令被调用(bool)地位:它成功与否,如果一个错误发生,它将被设置为false(字符串)错误:错误消息如果操作没有完成(bool)结果:执行操作的结果,在这种情况下,如果灯光被启用,则为TRUE,否则为false} */
cmbScanner.setLightsOn(true,函数(response){//console.log(response);});cmbScanner.setLightsOn(true)。然后(函数(response){///或使用承诺,回调函数包装在承诺中//因此,如果我们不将回调函数设置为参数,将使用默认函数//并返回继续链的承诺});
要检查闪光灯是否打开,我们可以使用:
/ * * @return承诺包含JSON对象{(string)行动:DMCC命令被调用(bool)地位:它成功与否,如果一个错误发生,它将被设置为false(字符串)错误:错误消息如果操作没有完成(bool)结果:执行操作的结果,在这种情况下,如果灯光被启用,则为TRUE,否则为false} */
cmbScanner.isLightsOn(真的,函数(响应){/ / console.log(响应);});cmbScanner.isLightsOn(true).then(function(response){//或者带有承诺的回调函数被包装在一个承诺中//所以如果我们不设置一个回调函数作为参数,将使用默认的一个回调函数//它将返回一个承诺来继续链});
如果我们想返回我们使用的解码器看到的最后一个图像enerialImage().如果我们想要使用返回图像的图像统计enableImageGraphics()。
cmbScanner.enableImage(真正的);//它将在结果中启用图像cmbScanner.enableImageGraphics(true);//将显示在图像上检测到的条形码的确切位置
条形码结果对象的结构是:
interface BarcodeResult {readString: string, symbologyString: string, symbology: integer, goodRead: bool, xml: string, imageGraphics?:字符串,图片吗?:字符串};
大多数API方法可以替换为将适当的命令发送到MX(或摄像机)读取器。
发送命令接收回调并将其包裹成一个承诺,因此链可以继续。
使用
cmbScanner.sendCommand( “SET SYMBOL.POSTNET OFF”)。然后(函数(结果){//并承诺让我们看看我们的命令所做的console.log(JSON.stringify(结果));});//或这样cmbScanner.sendCommand(“SET LIGHT.INTERNAL-ENABLE ON”)。然后(函数(结果){//如果命令是成功的,我们应具有灯开每当我们开始扫描过程的console.log(JSON.stringify(结果));});
第一个命令将禁用象征POSTNET.第二个将打开闪光灯。
这两种操作都可以通过相应的API函数执行setSymbologyEnabled()和setlightson()一般来说,开发人员应该总是倾向于使用API函数sendcommand()。
不过,也有在科尔多瓦插件不包括某些用例场景的情况下,我们总是可以使用sendCommand的。
如果我们想改变我们的MX设备“哔声”和“灯光”,我们可以使用:
行动 | 命令 | 范围 | 参数值 | 参数的描述 | 结果行动 |
---|---|---|---|---|---|
设置|获取 |
OUTPUT.USER - 配置 |
事件编号、蜂鸣音、蜂鸣音编号、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(“setoutput.USER-configure1 1 2 4 ON”)。然后(函数(响应){//console.log(响应);//打印操作结果});
这将用户事件#1配置为两个带有红色LED和振动的中等嘟嘟声。为了激活这个事件,我们使用:
cmbscanner.sendcommand(“output.user1”)。然后(函数(响应){//这将调用user1的存储设置项,因此MX设备基本上用红色LED和振动越大哔哔声})
如果我们需要重新设置MX/摄像头读取器的配置,我们可以使用:
cmbscanner.resetconfig(函数(结果){console.log(结果);})
/*@return A promission包含JSON对象{(字符串)操作:已调用的DMCC命令(bool)状态:是否成功,如果发生错误,将设置为false(字符串)err:如果操作未完成且存在错误,则显示错误消息。默认值为null(bool)result:sendCommand操作的结果}*/