Cognex移动条码SDK(cmbSDK)是一种用于开发移动条码扫描应用程序的工具。CmbSDK基于Cognex的DataMan技术和Manatee Works条码扫描SDK,它允许您为移动设备创建条码扫描应用程序。用于条码扫描的移动设备范围从智能手机到MX系列工业条码阅读器。CmbSDK ab通过一个ReaderDevice连接层。一旦应用程序与阅读器建立了连接,就会使用一个单一的、统一的API作为配置设备的接口,从而消除了编写太多条件代码的需要。
CmbSDK提供两个基本的ReaderDevice连接层:
cmbSDK支持康耐克斯的MX系列移动终端,使用cmbSDK的一些功能如下:
通常情况下,你可以通过USB或lightning接口将移动设备(手机或平板电脑)连接到PC上,开始调试。如果MX移动终端通过USB或闪电端口连接到您的移动设备,而您的应用程序正在运行,您需要通过Wi-Fi调试您的应用程序。
要使用Android Studio进行调试,请通过USB将Android设备连接到PC,并确保可以使用USB电缆运行和调试应用程序。
要将Android设备连接到Wi-Fi,请确保在IDE旁边安装了Android工具。
作为条形码扫描设备的智能手机在功能上的差异导致了不同于特定扫描仪的用户体验,从而影响了移动条形码扫描应用程序的设计。通过遵循一些简单的指导方针,您可以使用cmbSDK开发应用程序,在使用MX移动终端或移动设备的内置摄像头时,它们的工作方式与cmbSDK相同。
CmbSDK采用的一组默认选项为条形码读取与内置的移动设备的摄像头。然而,cmbSDK没有实现对相机的读者保存的配置。这意味着应用程序每次开始使用相机的读者,它开始用相机阅读器的默认设置。对于默认设置的列表,请参阅附录.
在没有硬件触发器的情况下,移动设备必须使用替代方法来启动条形码扫描。cmbSDK支持三种触发条形码扫描的方法:
内置摄像头在移动设备显示屏上提供实时流预览,用于条形码瞄准。重新定位移动设备,直到条形码出现在内置摄像头的视野中,并且应用程序对其进行解码。CmbSDK提供了一个内置的预览控件,可以部分或全屏显示,也可以纵向或横向显示。
cmbSDK还支持被动瞄准器:连接到移动设备或其外壳的设备,使用设备的LED闪光作为光源来投射瞄准或瞄准模式。这种移动设备可以投射类似于特制扫描仪的瞄准器模式,因此不需要实时预览。然而,使用LED闪光灯作为瞄准器,一般扫描照明是不可用的。
cmbSDK支持纵向、横向和自动旋转条码预览和扫描方向的显示。移动设备可以扫描大多数条形码,无论应用程序和/或移动设备的方向。
横向或纵向 | 仅限肖像 | 景观只有 |
---|---|---|
大多数条形码可以在纵向或横向扫描。 | 大多数定义良好且尺寸适中的条形码都可以纵向扫描,这是固定移动设备最自然的方式。 例如:QR, Data Matrix, Maxicode。 |
长、密或形状不好的条形码更容易在横向扫描,横向扫描的分辨率更高。 例子:PDF417。 |
移动设备是条码解码的理想平台。cmbSDK针对移动环境进行了优化,但图像分析和条码解码仍然是CPU密集型活动。由于这些进程与移动操作系统(OS)、服务和其他应用程序共享移动设备的CPU,所以这些进程优化了条形码扫描应用程序,并将其限制为只使用他们需要的cmbSDK的特性。
优化应用程序:
当cmbSDK初始化以与移动设备的内置摄像头一起使用时,默认情况下不启用条形码符号。
安装Android cmbSDK
在“文件名”字段中浏览cmbSDK .AAR文件,然后单击完成.
安装在该MX Connect应用程序应用商店与MX移动终端通信。
安装iOS cmbSDK:
要在没有MX移动终端的移动设备上使用cmbSDK进行条形码扫描,需要安装许可密钥。如果许可证密钥丢失,将出现星号而不是扫描结果。
有关如何获取许可密钥(包括30天试用许可)的信息,请与康耐视销售代表联系。
Android:
<元数据android: name = " MX_MOBILE_LICENSE " android: value = " YOUR_MX_MOBILE_LICENSE " / >
您还可以通过在创建新实例时复制下面的文本来添加许可密钥ReaderDevice.
case PhoneCamera: readerDevice = readerDevice。getPhoneCameraDevice(this, param_cameraMode, PreviewOption.DEFAULTS, null, "SDK_KEY");
iOS:
获得许可密钥后,将其作为字符串添加到应用程序的Info中。Plist文件下的密钥MX_MOBILE_LICENSE.
安装cmbSDK你的项目。
使用DataManSystem.createDataManSystemForMXDevice ()方法创建DatamanSystem对象。
CmbSDK为支持的扫描设备(MX移动终端和手机的摄像头)提供了一个高级的抽象接口。
应用程序和条形码扫描设备之间的主要接口是ReaderDevice类。的ReaderDevice类表示设备的抽象层,处理所有通信和必要的硬件管理,如使用智能手机扫描。
执行以下步骤来使用cmbSDK:
从ReaderDevice使用要使用的扫描设备类型初始化(MX阅读器或相机的读者).
连接到ReaderDevice创建实例。
配置ReaderDevice例如,如果必要的话。
开始扫描。
执行以下步骤来设置和启动cmbSDK:
进口com.cognex.dataman.sdk。*进口com.cognex.mobile.barcode.sdk。*
根据您的需要:
如果要显示最后扫描的图像,则需要ImageView用于显示预览或扫描会话的最后一帧的容器。
如果您想以文本形式显示扫描结果,您需要TextView.
公共类ScannerActivity扩展AppCompativity实现OnConnectionCompletedListener、ReaderDeviceListener、ActivityCompat.OnRequestPermissionsResultCallback{..//connect方法已完成,在这里您可以看到建立连接时是否有错误@Override public void onConnectionCompleted(ReaderDevice ReaderDevice,Throwable error){//如果我们有有效的连接错误,则参数将为null,//否则,如果(错误!=null){//如果(错误实例CameraPermissionException)ActivityCompat.requestPermissions,在连接到读卡器设备时会出现错误,请通知我们有关问题的信息(((ScannerActivity)this),新字符串[]{Manifest.permission.CAMERA},REQUEST_permission_CODE);updateUIByConnectionState();}//当与self.readerDevice的连接已更改时调用该字符串。//readerDevice仅在“ConnectionState.Connected”状态@Override public void onConnectionStateChanged下可用。//readerDevice(ReaderDevice reader){clearResult();如果(reader.getConnectionState()==ConnectionState.Connected){//我们刚刚连接,现在配置设备,我们希望它如何配置ReaderDevice();}isScanning=false;updateUIByConnectionState();}//在扫描完成后,通过检测条形码、使用屏幕按钮或硬件触发按钮取消扫描,或者如果扫描超时@Override public void onReadResultReceived(ReaderDevice ReaderDevice,ReadResults){clearResult();if(results.getSubResults())!=null&&results.getSubResults().size()>0{for(ReadResult subResult:results.getSubResults()){createResultItem(subResult);}否则如果(results.getCount()>0){createResultItem(results.getresulttat(0));}isScanning=false;btnScan.setText(“开始扫描”);resultListAdapter.notifyDataSetChanged();}//当MX-1xx设备可用(USB电缆已插入,或MX设备已打开)时调用此命令//或当以前可用的MX-1xx设备不可用时(USB电缆已拔出,由于不活动或电池耗尽而关闭)@覆盖可用性更改的公共无效(ReaderDevice reader){if(reader.getAvailability()==Availability.AVAILABLE){connectToReaderDevice();}如果(reader.getAvailability()==Availability.UNAVAILABLE){AlertDialog.Builder alert=新建AlertDialog.Builder(此);alert.setTitle(“设备变得不可用”).setPositiveButton(“确定”,null.create().show();}}
使用以下工厂方法初始化MX读卡器的读卡器设备对象:
case MX: readerDevice = readerDevice . getmxdevice (this);//当MX设备变为可用/不可用时监听if (!availabilityListenerStarted) {readerDevice.startAvailabilityListening();availabilityListenerStarted = true;}
MX移动终端的可用性可以在设备打开或关闭,或USB线连接或断开时发生变化。您可以使用以下方法处理这些更改ReaderDeviceListener接口方法:
public void onAvailabilityChanged(ReaderDevice reader);
建议使用MX移动终端进行条形码扫描。然而,cmbSDK也支持使用移动设备的内置摄像头。这包括可选的外部瞄准器或照明的支持,以及自定义直播预览的外观。
若要使用移动设备的内置摄像头扫描条形码,请初始化ReaderDevice对象使用getPhoneCameraDevice静态方法。初始化后,相机阅读器有几个选项。需要配置的参数如下:
的上下文参数提供对当前所处活动的引用。
的CameraMode参数的类型为中定义的CameraModeCameraMode.java它接受下表中列出的一个值。
这些模式为读者提供以下默认设置:
基于选定的模式,将设置其他照明选项和行为,也将在表中列出。
价值 | 描述 | 照明 | 直播预览 |
---|---|---|---|
NO_AIMER | 初始化阅读器,以便在移动设备屏幕上使用实时流预览,这样用户就可以将条形码定位在摄像头的视野范围内,以进行检测和解码。如果移动设备没有瞄准配件,请使用此模式。 | 照明可用,控制照明的按钮在实时流预览中可见。 | 显示 |
如果命令被发送到阅读器进行目标控制,它们将被忽略。 | |||
PASSIVE_AIMER | 使用被动瞄准器初始化读取器。在此模式下,设备屏幕上没有实时预览,因为瞄准模式是投影的。 | 照明不可用,直播预览没有照明按钮。 | 不显示 |
如果向读卡器发送用于照明控制的命令,则会忽略这些命令,因为在此模式下,假定移动设备的内置LED用于瞄准。 | |||
FRONT_CAMERA | 初始化读取器,以便使用移动设备的前置摄像头(如果可用)。使用这种配置要小心,因为大多数前置摄像头没有自动对焦和照明,提供的图像分辨率明显较低。在此模式下,照明不可用。 | 使用前置摄像头。 | 显示 |
照明不可用,直播预览没有照明按钮。 | |||
如果命令发送给阅读器进行瞄准或照明控制,它们将被忽略。 |
的预览选项参数的类型为预览选项中定义的PreviewOption.java,用于更改读取器的默认值或覆盖从所选对象派生的默认值CameraMode.您可以指定以下选项:
价值 | 描述 |
---|---|
违约 | 接受CameraMode设置的所有默认值。 |
NO_ZOOM_BUTTON | 隐藏直播预览中的变焦按钮,用户无法调整移动设备摄像头的变焦。 |
无照明按钮 | 皮上的实时流预览的照明按钮,防止用户切换照明。 |
HARDWARE_TRIGGER | 启用模拟硬件触发器(音量下降按钮),以便在移动设备上开始扫描。此按钮仅在按下时开始扫描,无需像专用扫描仪的触发器一样按住,第二次按下此按钮不会停止扫描过程。 |
PAUSED | 如果使用实时流预览,则预览将在startScanning ()方法被调用,但读者并不开始解码直到用户按下屏幕上的按钮以开始扫描过程。 |
ALWAYS_SHOW | 即使选择了瞄准模式,也会显示直播预览(例如CameraMode == PASSIVE_AIMER)。 |
高分辨率 | 使用更高分辨率的设备摄像头,在支持它的设备上将默认的1280x720分辨率更改为1920x1080,在不支持它的设备上更改为默认分辨率。这可以帮助扫描小的条形码,但增加解码时间,因为每帧有更多的数据需要处理。 |
HIGH_FRAME_RATE | 使用设备的摄像头在60帧/秒而不是默认的30帧/秒,以提供更流畅的摄像头预览。 |
显示关闭按钮 | 在局部视图中显示关闭按钮。 |
的ViewGroup(可选)参数指定实时流预览的容器。如果不设置该参数零,使用全屏预览。
的注册密钥(可选)参数用于使用您拥有的许可密钥授权您的SDK
海关数据(可选)参数用于自定义跟踪
例子
创建一个没有瞄准器,没有缩放按钮,使用软触发的阅读器:
readerDevice=readerDevice.getPhoneCameraDevice(此,CameraMode.NO_AIMER,PreviewOption.NO_ZOOM_按钮| PreviewOption.PAUSED);
这开始了一个预览,扫描仪暂停和一个软触发按钮切换扫描。按下软触发按钮后,预期的预览外观如下:
由于设置了活动符号,图像中的取景器具有活动扫描表面。有关详细信息,请参见使象征学.
在Android 6.0及以上版本中,您需要请求用户的许可才能访问移动设备的内置摄像头。
如果由于权限问题而无法打开相机,则onConnectionCompleted (readerDevice错误)回调包含相机许可例外在错误参数中。您可以使用运算符操作符并在活动中请求权限。
如果(错误instanceof CameraPermissionException) ActivityCompat.requestPermissions(((ScannerActivity) this), new String[]{Manifest.permission. permission. permission. permission. permission。相机},REQUEST_PERMISSION_CODE);
您需要实现ActivityCompat.OnRequestPermissionResultCallback界面以捕获用户权限结果。
来处理用户响应onRequestPermissionResult(…),可以使用以下代码重新连接手机摄像头:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){//检查权限请求的结果。如果用户允许,则连接到readerDevice。长度> 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {if (readerDevice != null && readerDevice. getconnectionstate () != ConnectionState.Connected) readerDevice.connect(ScannerActivity.this);} else {if (ActivityCompat.shouldShowRequestPermissionRationale(((ScannerActivity) this), Manifest.permission.CAMERA)) {AlertDialog。Builder构建器= new AlertDialog.Builder(这).setMessage(“你需要允许访问相机”).setPositiveButton(“OK”,新DialogInterface.OnClickListener () {@Override公共空onClick (DialogInterface DialogInterface, int i) {ActivityCompat.requestPermissions (ScannerActivity。这样,新String [] {Manifest.permission。相机},REQUEST_PERMISSION_CODE);}}) .setNegativeButton("取消",null);AlertDialog = builder.create();dialog.show ();} } } }
连接前,设置ReaderDeviceListener要接收事件的对象:
readerDevice.setReaderDeviceListener(这个);
有关详细信息,请参见中的步骤3你的应用程序设置到使用康耐视移动条码SDK为Android.
此外,您可以启用发送来自读取器的最后一个触发的图像和SVG:
readerDevice.enableImage(真);readerDevice.enableImageGraphics(真);
初始化之后,调用connect方法ReaderDevice以及设置侦听器方法来处理来自读取器的响应。connect方法接受OnConnectionCompletedListener作为参数:
readerDevice.connect(ScannerActivity.this); //确保设备打开并准备就绪
下面的侦听器方法使用newReaderDevice状态信息:
public void onConnectionStateChanged(ReaderDevice reader);public void onConnectionCompleted(ReaderDevice reader, Throwable err)
的onConnectionCompleted方法作为connect的参数传递,也会在连接过程完成时调用。如果有连接错误,此方法提供Throwable对象。
连接到扫描设备后,您可能需要更改它的一些设置。CmbSDK提供了一组高级的、独立于设备的api,用于设置和检索设备的当前配置。
您可以通过调用正确配置的读取器来开始扫描条形码startScanning方法从你ReaderDevice类:
readerDevice.startScanning ();
您可以停止与以下扫描:
readerDevice.stopScanning ();
在下列情况之一时,扫描停止:
属性中的ReadResults可迭代结果集合对象,当成功解码条形码时ReaderDevice侦听器方法。的onReadResultReceived因为读取器解码的条形码或扫描过程完成监听方法要么调用。
例子
@Override public void onReadResultReceived(ReaderDevice ReaderDevice, ReadResults results) {clearResult(); //扫描完成后调用这个函数,可以通过检测条形码,使用屏幕上的按钮或硬件触发按钮取消扫描,或者扫描超时。if (results.getSubResults() != null && results.getSubResults().size() > 0) {for (ReadResult subResult: results.getSubResults()) {createResultItem(subResult);}} else if (results.getCount() > 0) {createResultItem(results.getResultAt(0));} isScanning = false;btnScan。setText(“开始扫描”);resultListAdapter.notifyDataSetChanged ();}
CmbSDK不启用任何符号学默认情况下,使用移动设备的内置摄像头读取条形码。您必须启用应用程序需要扫描的所有条形码符号,以实现最佳扫描性能。有关详细信息,请参见优化移动设备性能.
的下列方法可以启用单个符号ReaderDevice类:
public void setSymbologyEnabled(final Symbology Symbology,final boolean enable,final OnSymbologyListener listener)readerDevice.setSymbologyEnabled(Symbology.DATAMATRIX,true,null);readerDevice.setSymbologyEnabled(Symbology.UPC_EAN,true,null);
此方法中用于符号参数的所有符号可在中找到ReaderDevice.java.
例子
/*启用QR扫描*/ readerDevice.setSymbologyEnabled(symbol。QR,真的,null);
你也可以使用相同的方法来禁用符号:
/*禁用代码25扫描*/readerDevice.setSymbologyEnabled(Symbology.C25,false,null);
您可以为实现该方法OnSymbologiesListener要检查符号变化的结果:
@Override公共空onSymbologyEnabled (ReaderDevice读者,象征符号,布尔启用,可抛出错误){如果(错误! = null){/ *可能不成功的象征是由当前不支持的设备,或者有问题ReaderDevice和MX设备之间的连接* /}其他{/ /成功}}
如果你的阅读设备配备了照明灯,你可以控制它们:当扫描开始时,你可以打开或关闭它们。使用Reader Device对象的以下方法:
setLightsOn(true,null);
可以实现的接口方法OnLightsListener,这是该方法的第二个参数。
公共类scaneractivity扩展AppCompatActivity实现....OnLightsListener……{…@Override public void onLightsOnCompleted(ReaderDevice reader, Boolean on, Throwable error) {if (error != null) {// Unsuccessful} else {// Success}}}
如果使用移动设备的内置摄像头作为读取设备,可以配置变焦级别和使用方式。有三个缩放级别:
的设置照相机。缩放百分比[100-MAX][100-MAX]命令,用于配置两个级别的放大百分比。100不被放大,MAX(上升到1000)在设备能够的范围内放大。第一个参数用于设置级别1的缩放,第二个参数用于设置级别2的缩放。
控件可以检查当前的缩放设置GET CAMERA.ZOOM%的命令,该命令返回两个值:级别1和级别2缩放。
例子
readerDevice.getDataManSystem()。sendCommand(“设置相机。ZOOM-PERCENT 250 500”);
获取/设置摄影机。缩放0-2是另一个设置缩放级别或返回实际设置的命令。SET命令的可能值为:
你可以之前,甚至在扫描过程中调用这个命令,变焦上升到配置的级别。如果扫描结束时,该值重置为正常行为(0)。
例子
readerDevice.getDataManSystem()。sendCommand(“设置相机。放大2”);
当使用移动设备的摄像头时,cmbSDK允许你在预览容器中或全屏查看摄像头预览。这个预览还包含一个可定制的覆盖层。cmbSDK相机覆盖功能按钮缩放,闪烁和关闭扫描仪,和一个进度条指示扫描超时。
使用cmbSDK 2.0版本中最初使用的遗留相机覆盖。x和ManateeWorks SDK, use this property from MWOverlay before initializing the readerDevice:
MWOverlay.overlayMode=MWOverlay.overlayMode.OM_旧版;
当使用cmbSDK覆盖:
如果您的图像与cmbSDK使用的名称相同,cmbSDK和旧版覆盖都允许您更改缩放和闪烁按钮上使用的图像。您可以在参考资料中找到cmbSDK中使用的图像和名称/必威随行版官网drawable-mdpi和drawable-hdpi目录。虽然其他分辨率是可选的,但这两个目录必须包含具有正确名称的图像,以便cmbSDK显示正确的图像。
cmbSDK和遗留的覆盖层都允许您更改检测到条形码时显示的矩形的颜色和宽度。
例子:
MWOverlay.locationLineColor=Color.YELLOW;MWOverlay.locationLineWidth=6;
在场景中,当你有很多条形码在小的表面上,非常接近的一个,有一个新功能可用cmbSDK v.2.2.0称为目标(中心)解码.还有的是,用于配置该模式3分DMCC的。读者设备有效连接后使用它们:
获取/设置解码器。target - decoding命令用于启用或禁用目标解码。默认情况下关闭。
例子
readerDevice.getDataManSystem().sendCommand(“设置解码器.TARGET-DECODING开启”);
译码器。centering - window命令用于设置(或获取)中心窗口的大小。数字以图像的百分比表示。centerX和centtery定义了居中窗口的中间位置在图像中的位置。sizeX和sizeey定义中心窗口的大小。
如果条形码接触到居中窗口,它将被接受。条形码不必包含在窗口中,只需触摸它。缺省情况下[50 50 10 10]。
例子
readerDevice.getDataManSystem().sendCommand(“SET DECODER.CENTERING-WINDOW 50 5”);
译码器。DISPLAY-TARGET命令用于设置(或获取)是否应该在SVG结果中显示居中窗口。默认情况下了
例子
readerDevice.getDataManSystem()。sendCommand(“设置解码器。DISPLAY-TARGET”);
以下是启用目标解码时的扫描预览示例:
中心窗口(矩形)的颜色和宽度可以改变:
MWOverlay.targetRectLineColor=Color.RED;MWOverlay.targetRectLineWidth=2;
如果你想一次扫描更多的条形码,在一个扫描会话中,你可以使用多代码模式。此模式可从cbmSDK v.2.2.x获得。要配置此模式,请使用4个DMCC。在与读卡器设备有效连接后使用它们:
GET / SET MULTICODE.NUM-码命令用于码阅读器的设置数量必须找到一个成功的读取结果。默认情况下为1。
例子
readerDevice.getDataManSystem()sendCommand( “SET MULTICODE.NUM-CODES 3”)。
获取/设置多码。PARTIAL-RESULTS命令用于设置阅读器如何解释要查找的代码数量。如果找到1个或更多的代码,ON = reader将返回一个成功的读取。只有当发现的代码数等于MULTICODE时,OFF = reader才会返回成功的读操作。NUM-CODES价值。默认情况下关闭。
例子
readerDevice.getDataManSystem().sendCommand(“将MULTICODE.PARTIAL-RESULTS设置为ON”);
GET/SET DECODER.REREAD-NOT-LAST-N命令用于定义N,如果此代码是在最近N次读取中读取的,则不要读取代码。缺省情况下,0,没有限制。
例子
readerDevice.getDataManSystem()。sendCommand(“设置解码器。REREAD-NOT-LAST-N 1 ");
获取/设置多码。MAX-NUM-CODES命令用于设置每个符号组1 - 5的期望最大编码数:
对于任何一个符号可以参数MULTICODE.NUM-码超过没有期望值,找到代码的总数。第一参数是符号组,secont一个是码的最大NUM。默认为1。
例子
readerDevice.getDataManSystem()。sendCommand(“多码。MAX-NUM-CODES 1 3”);
启用多代码模式时,在onReadResultReceived回调函数中,您可以从中获取所有结果的列表getSubResults ()方法从ReadResults对象。如果禁用多代码模式,此方法将返回null。
开始v.2.2形式。xwe add parsers plugin in cmbSDK. Parsers help us to extract decoded results into a structured format (JSON, Key-Value) for search, sort, and validation. There are six types of parsers:
在我们的SDK中也有使用AUTO解析器类型的选项,我们将尝试找到应该使用哪个。
使用setParser ()方法从ReaderDevice对象设置要使用的解析器类型,或getParser ()获取所选类型。在有效连接到读卡器设备后设置解析器类型。默认情况下没有。
例子
readerDevice.setParser (ResultParser.AAMVA);
在你从ReadResult对象的onReadResultReceived回调函数中启用所需的解析器类型后,你可以从接收到的结果中获得结构化格式:
//从结果中返回json格式的解析文本。//从结果结果中返回解析后的文本。
如果你想为你的扫描过程中的利益编辑/调整大小的区域,当您使用手机摄像头作为读取设备可以使用(GET | SET)解码器.ROI百分比[X W Y H]DMC命令(可从cmbSDK v2.2.x获得),其中x和Y表示每个轴上RoI的起点,W H表示从起点开始的RoI宽度和高度,值为百分比。检查范围为0-100,宽度和高度的最小值为5,以及参数之间隐含的约束,例如给定轴的总和不超过100。在有效连接到读卡器设备后使用此DMCC。
例子
readerDevice.getDataManSystem().sendCommand(“SET DECODER.ROI-PERCENT 10 80”);
Cognex扫描设备通过DMCC (DataMan Control Commands)对设备进行配置和控制。设备的每个功能都可以使用这种基于文本的语言进行控制。API提供了一种向设备发送DMCC命令的方法。存在用于设置和查询配置属性的命令。
的附录包括完整的DMCC参考相机阅读器。
下面的示例展示了发送到设备进行更高级配置的不同DMCC。
例子
//将扫描方向改为omnidirectional readerDevice.getDataManSystem()。sendCommand("SET DECODER.1D-SYMBOLORIENTATION 0", ScannerActivity.this);//修改实时流预览的扫描超时为10秒readerDevice.getDataManSystem()。sendCommand(“设置解码器。MAX-SCAN-TIMEOUT 10”,ScannerActivity.this);
您还可以调用DMCC查询命令并在OnResponseReceivedListener.onResponseReceived()方法。
//获取连接设备的类型readerDevice.getDataManSystem()。sendCommand(“设备。的名字", new OnResponseReceivedListener() { @Override public void onResponseReceived(DataManSystem dataManSystem, DmccResponse dmccResponse) { if (dmccResponse.getError() != null) { // Unsuccessful Log.e("DMCC_ERR", “GET DEVICE.NAME failed”,dmccResponse.getError()); } else { // Success - Use the following result fields: //int mResponseId = dmccResponse.getResponseId(); //String mPayLoad = dmccResponse.getPayLoad(); //byte[] mBinaryData = dmccResponse.getBinaryData(); } } ); }
CmbSDK包括一个方法来重新设置设备到它的默认设置(不是工厂默认)。对于MX移动终端,这是已保存的配置。对于内置相机,这些是在附录,这里不启用任何符号。设备复位的方法如下:
readerDevice.resetConfig(空);
控件可以监视此异步方法的完成情况OnResetConfigListener接口,这是一个可选参数。
public class ScannerActivity extends Activity implements ....OnResetConfigListener……{…@Override public void onResetConfigCompleted(ReaderDevice reader, Throwable error) {if (error != null){//不成功}else{//成功}}
成功读取条形码后,系统将onReadResultReceived方法创建并返回一个ReadResult对象。在具有多个条形码的情况下成功地读出的单个图像或帧,多个上ReadResult对象在ReadResult对象。
ReadResult类具有描述条形码读取结果的属性:
当扫描结束时没有成功读取,则ReadResult返回goodRead属性设置为false。
控件中填充的图像和imageGraphics属性ReadResult对象,设置相应的enableImage ()和/或enableImageGraphics()的属性ReaderDevice对象。
要访问扫描条形码中的原始字节,可以使用XML属性。这些字节以Base64字符串的形式存储在"full_string"标签下。该示例展示了如何使用XML解析器从XML属性中提取原始字节。
例子
try {XmlPullParserFactory factory = XmlPullParserFactory. newinstance ();factory.setNamespaceAware(真正的);XmlPullParser xpp = factory.newPullParser();字符串标签= "";//原始字节将存储在变量byte[] bytes中;xpp。setInput(新StringReader (result.getXml ()));int eventType = xpp.getEventType();while (eventType == XmlPullParser.END_DOCUMENT) {if (eventType == XmlPullParser.START_TAG) {tag = xpp.getName();} else if (eventType == XmlPullParser. xml . xml)TEXT && tag.equals("full_string")) { String base64String = xpp.getText(); // Get the bytes from the base64 string here bytes = Base64.decode(base64String, Base64.DEFAULT); break; } else if (eventType == XmlPullParser.END_TAG && tag.equals("full_string")) { tag = ""; break; } eventType = xpp.next(); } } catch (Exception e) { e.printStackTrace(); }
默认情况下,图像和SVG结果是禁用的,这意味着在扫描时,ReadResults不要在相应的属性中包含任何数据。
要启用图像结果,请调用enableImage ()方法从ReaderDevice对象:
readerDevice.enableImage(真);
要启用SVG结果,调用enableImageGraphics()方法ReaderDevice对象:
readerDevice.enableImageGraphics(真);
如果设备因电池电量低或人为拔线而断开,则可通过onConnectionStateChanged ()的方法ReaderDeviceListener接口。
下表列出了使用内置摄像头进行条形码扫描时cmbSDK支持的各种DMCC命令。
获得/设置 |
命令 |
参数 |
描述 |
默认值 | |||
---|---|---|---|---|---|---|---|
获得/设置 |
电池充电 |
以百分比形式返回设备的当前电池电量。 |
N/A | ||||
哔哔的声音 |
播放可听到的“哔”声(音调)。 |
N/A | |||||
获得/设置 |
哔哔的声音。好 |
(0 - 3) (0 - 2) |
设置嘟嘟声的数量(0-3)和嘟嘟声音调/音调(0- 2,低,中,高)。对于内置摄像头,只支持一个单一的哔哔声,没有音高控制。因此,0 1关闭哔哔声,11 1打开哔哔声。 |
11 1(打开蜂鸣器) | |||
获得/设置 | 相机。变焦 | 0-2 | SET命令的可能值是:0 - normal (unzoomed), 1 -zoom at level 1, 2 -zoom at level 2。此缩放级别用于扫描期间。当扫描结束时,它重置为0。 |
N/A | x | ||
获得/设置 | 相机。变焦-PERCENT | [100 - max] [100 - max) | 设置/返回1级缩放(Android上默认为150%,iOS上默认为200%),以及2级缩放(安卓系统默认为300%,iOS系统默认为400%)。 注:相机至少需要开始从SDK一次拥有最大变焦能力适当的值(MAX) |
N/A | x | ||
获得/设置 |
CODABAR。CODESIZE |
关于极小极大 |
接受任意长度的Codabar。 |
N/A | X |
||
获得/设置 |
C11。CHKCHAR |
|关闭 |
打开/关闭代码11检查数字。 |
从 | X |
||
获得/设置 |
C11。CHKCHAR-OPTION |
1 2 |
需要单独的校验和。需要校验和的两倍。 |
1 | X |
||
获得/设置 |
C11.1码大小 |
关于极小极大 |
接受任何长度的代码11。 |
N/A | X |
||
获得/设置 |
这件。CODESIZE |
关于极小极大 |
接受任何长度的代码25。 |
N/A | X |
||
获得/设置 |
C39.ASCII |
|关闭 |
打开/关闭码39扩展ASCII码。 |
从 | |||
获得/设置 |
C39。CODESIZE |
关于极小极大 |
接受任何长度的代码39。 |
N/A | |||
获得/设置 |
C39。CHKCHAR |
|关闭 |
打开/关闭代码39检查数字 |
从 | |||
获得/设置 |
C93.ASCII |
|关闭 |
打开/关闭Code 93扩展ASCII码 |
从 | X |
||
获得/设置 |
C93.1码大小 |
关于极小极大 |
接受任意长度的代码93。 |
N/A | |||
获得/设置 | COM。DMCC-HEADER |
0 1 | 设置或获取扩展模式中使用的标题选项。 | 0 | |||
获得/设置 |
COM。DMCC-RESPONSE | 0 1 | DMCC响应格式。1:扩展。 |
0:沉默(默认) | |||
配置。默认的 |
重置大多数相机API设置为默认,除了那些注意到不重置(见附录B)。要重置所有设置,使用DEVICE.DEFAULT。 |
N/A | |||||
配置。保存 | 将当前配置保存到非易失性存储器中(仅MX-1XXX)。注意,当关闭一个MX权力或进入睡眠模式,当该设备被唤醒上次保存的配置将被恢复。 | N/A | |||||
配置。恢复 | 从非易失性内存中还原保存的配置(仅MX-1xxx)。 | N/A | |||||
获得/设置 |
数据类型 |
|
指定要返回的结果(多个值的sum): |
1 | |||
获得/设置 |
DATABAR.EXPANDED |
|关闭 |
打开/关闭DataBar扩展符号。 |
在 | |||
获得/设置 |
DATABAR。有限的 |
|关闭 |
打开/关闭DataBar Limited符号。 |
从 | |||
获得/设置 |
DATABAR。RSS14 |
|关闭 |
打开/关闭DataBar RSS14符号。 |
从 | X |
||
获得/设置 |
DATABAR.RSS14STACK |
|关闭 |
打开/关闭DataBar RSS14堆叠符号。 |
从 | X |
||
获得/设置 |
DECODER.1D——SYMBOLORIENTATION |
0 |
使用全方位扫描方向。 |
1 | |||
获得/设置 |
译码器。努力 |
1 - 5 |
设置图像分析/解码的努力水平。缺省值是2。不要使用4-5进行在线扫描。 |
2 | X |
||
获得/设置 |
译码器。MAX-SCAN——超时 |
1 - 120 |
设置实时流预览的超时时间。当达到超时时,解码将暂停;直播预览将保留在屏幕上。 |
60 | X |
||
得到 | 译码器。MAX-THREADS | 返回设备支持的最大CPU线程数。 | N/A | X | |||
获得/设置 | 译码器。线色 | (0-MAX) | 指定扫描程序在扫描过程中可以使用的最大CPU线程数。 | N/A | X | ||
设备。默认的 |
复位装置(包括照相机API)设置为默认值(参见附录B)。 |
N/A | |||||
得到 |
设备。FIRMWARE-VER |
获取设备固件版本。 |
N/A | ||||
得到 |
设备。ID |
返回Cognex分配给扫描设备的设备ID。 对于一个内置的摄像头,SDK返回53。 |
N/A | ||||
获得/设置 |
设备。的名字 |
返回分配给设备的名称。默认情况下,这是“MX-”加上DEVICE.SERIAL-NUMBER的最后6位数字。 |
|
||||
得到 |
设备。串行-数 |
返回设备的序列号。对于内置摄像头,SDK会分配一个伪随机数。 |
N/A | ||||
得到 |
设备类型 |
返回由Cognex分配给扫描设备的设备名称。对于内置摄像头,SDK返回“MX-Mobile”。 |
N/A | ||||
获得/设置 |
焦点,焦点时间 |
0-10 |
设置相机的自动对焦周期(相机应该尝试重新对焦的频率)。 |
3. | |||
获得/设置 |
I2O5.CHKCHAR |
|关闭 |
打开/关闭交错2的5个校验位。 |
从 | |||
获得/设置 |
I205。CODESIZE |
关于极小极大 |
接受任何长度交错2的5。 |
N/A | X |
||
获得/设置 |
的形象。格式 |
0 |
扫描器以位图格式返回图像结果。 |
1(JPEG) | |||
获得/设置 |
图像质量 |
10、15、20、……90 |
指定JPEG图像质量。 |
50 | |||
获得/设置 |
的形象。大小 |
0 |
扫描仪返回全尺寸图像。 |
1(1/4大小) | |||
获得/设置 |
光。瞄准手 |
0 - 1 |
禁用/启用瞄准器(当扫描开始时)。 |
默认基于cameraMode: 0: NoAimer和FrontCamera 1:PassiveAimer和ActiveAimer |
|||
获得/设置 | LIGHT.AIMER超时 | 0 - 600 | 艾默秒内暂停。 | N/A | |||
获得/设置 |
LIGHT.INTERNAL-启用 |
|关闭 |
启用/禁用照明(当扫描仪启动时)。 |
从 | |||
获得/设置 |
MSI.CHKCHAR |
|关闭 |
打开/关闭MSI Plessey检查数字。 |
从 | |||
获得/设置 |
MSI.CHKCHAR-OPTION |
0 |
使用mod 10校验和 |
0 |
|
||
获得/设置 |
MSI.CODESIZE |
关于极小极大 |
接受任何长度的MSI Plessey。 |
N/A | X |
||
获得/设置 |
的象征。AZTECCODE |
|关闭 |
打开/关闭阿兹特克代码符号。 |
从 | |||
获得/设置 |
的象征。CODABAR |
|关闭 |
打开/关闭Codabar符号。 |
从 | |||
获得/设置 |
的象征。C11 |
|关闭 |
开启/关闭的11码符号。 |
从 | X |
||
获得/设置 |
的象征。C128 |
|关闭 |
打开/关闭代码128符号。 |
从 | |||
获得/设置 |
的象征。这件 |
|关闭 |
打开/关闭代码25符号(标准)。 |
从 | |||
获得/设置 |
的象征。C39 |
|关闭 |
打开/关闭代码39符号。 |
从 | |||
获得/设置 |
的象征。C93 |
|关闭 |
打开/关闭代码93符号。 |
从 | |||
获得/设置 |
SYMBOL.COOP |
|关闭 |
打开/关闭COOP符号(代码25变体)。 |
从 | X |
||
获得/设置 |
SYMBOL.DATAMATRIX |
|关闭 |
打开/关闭数据矩阵符号。 |
从 | |||
获得/设置 |
的象征。DATABAR |
|关闭 |
打开/关闭DataBar Expanded和Limited符号。 |
从 | |||
获得/设置 |
的象征。DOTCODE |
|关闭 |
打开/关闭DotCode符号。 |
从 | |||
获得/设置 |
国际航空运输协会 |
|关闭 |
打开/关闭IATA符号(代码25变体)。 |
从 | X |
||
获得/设置 |
SYMBOL.INVERTED |
|关闭 |
打开/关闭反转符号(代码25变体)。 |
从 | X |
||
获得/设置 |
的象征。ITF14 |
|关闭 |
打开/关闭ITF-14符号(代码25变体)。 |
从 | X |
||
获得/设置 |
SYMBOL.UPC-EAN |
|关闭 |
打开/关闭UPC-A、UPC-E、EAN-8和EAN-13符号。 |
从 | |||
获得/设置 |
的象征。矩阵 |
|关闭 |
打开/关闭矩阵符号(代码25变种)。 |
从 | X |
||
获得/设置 |
的象征。MAXICODE |
|关闭 |
打开/关闭MaxiCode符号。 |
从 | X |
||
获得/设置 |
的象征。MSI |
|关闭 |
打开/关闭MSI Plessey符号。 |
从 | |||
获得/设置 |
的象征。PDF417 |
|关闭 |
打开/关闭PDF417符号。 |
从 | |||
获得/设置 |
的象征。地球 |
|关闭 |
打开/关闭行星符号。 |
从 | |||
获得/设置 |
的象征。POSTNET |
|关闭 |
打开/关闭POSTNET符号。 |
从 | |||
获得/设置 |
SYMBOL.4STATE-IMB |
|关闭 |
开启/关闭智能邮件条码符号。 |
从 | |||
获得/设置 |
SYMBOL.4状态-RMC |
|关闭 |
打开/关闭皇家邮政编码符号。 |
从 | |||
获得/设置 |
SYMBOL.QR |
|关闭 |
打开/关闭QR和MicroQR符号。 |
从 | |||
获得/设置 |
触发器。类型 |
0 |
单个(不支持) |
2(手动) | |||
获得/设置 |
UPC-EAN。EAN13 |
|关闭 |
打开/关闭EAN-13符号。 |
在 | X |
||
获得/设置 |
UPC-EAN。EAN8 |
|关闭 |
打开/关闭的EAN-8符号。 |
在 | X |
||
获得/设置 |
UPC-EAN。UPC-A |
|关闭 |
打开/关闭UPC-A符号。 |
在 | X |
||
获得/设置 |
UPC-EAN。UPC-E |
|关闭 |
打开/关闭UPC-E符号。 |
在 | X |
||
获得/设置 |
UPC-EAN。UPCE1 |
|关闭 |
打开/关闭UPC-E1符号。 |
从 | |||
获得/设置 |
UPC-EAN。补充 |
0 |
关闭UPC补充代码(忽略) |
0 | |||
获得/设置 | 振动。好 | |关闭 | 设置/获取是否在读取代码时振动(默认为ON) | N/A |
在安装康耐视产品时,请注意以下事项,以降低人身伤害或设备损坏的风险: