康耐视移动条码SDK(cmbSDK)是开发移动条码扫描应用程序的工具。CmbSDK基于康耐视的DataMan技术和海牛条码扫描SDK,它允许您为移动设备创建条码扫描应用程序。用于条形码扫描的移动设备范围从智能手机到MX系列工业条形码读取器。CmbSDK通过aReaderDevice连接层。一旦应用程序与阅读器建立了连接,就会使用一个统一的API作为配置设备的接口,从而消除了编写太多条件代码的需要。
CmbSDK提供了两个基本的ReaderDevice连接层:
cmbSDK支持康耐视的MX系列移动终端,使用cmbSDK的一些功能如下:
通常你通过USB或闪电端口将你的移动设备(手机或平板电脑)连接到你的电脑上,开始调试。如果MX移动终端通过USB或闪电端口连接到您的移动设备,而您的应用程序正在运行,您需要通过Wi-Fi调试应用程序。
要使用Android Studio进行调试,请通过USB将Android设备连接到PC,并确保您可以使用USB电缆运行和调试应用程序。
要将Android设备连接到Wi-Fi,请确保在IDE旁边安装了Android Tools。
智能手机作为条形码扫描设备的功能差异导致用户体验与专用扫描仪不同,从而影响了移动条形码扫描应用程序的设计。通过遵循一些简单的指导原则,您可以使用cmbSDK开发应用程序,使其在使用MX移动终端或移动设备的内置摄像头时以相同的方式工作。
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 cmsdk:
若要在没有MX移动终端的移动设备上使用cmbSDK进行条码扫描,需要安装许可密钥。如果许可证密钥丢失,将显示星号而不是扫描结果。
有关如何获取许可密钥(包括30天试用许可)的信息,请与您的康耐视销售代表联系。
Android:
.
创建新实例时,还可以通过复制下面的文本来添加许可密钥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.
实现OnConnectionCompletedListener, ReaderDeviceListener, ActivityCompat。OnRequestPermissionsResultCallback {....@Override public void onConnectionCompleted(ReaderDevice ReaderDevice, Throwable error){//如果我们有有效的连接,错误参数将为null,//否则这里是错误,告知我们的问题,我们有连接到阅读器设备如果(error != null){//请求相机权限,如果必要的话,如果(error instanceof CameraPermissionException) ActivityCompat.requestPermissions(((ScannerActivity) this),新字符串[]{Manifest.permission. error . error . error)。相机},REQUEST_PERMISSION_CODE);updateUIByConnectionState ();}} //当与self连接时调用。readerDevice已更改。// readerDevice只在“ConnectionState”状态下可用。onConnectionStateChanged(ReaderDevice阅读器){clearResult();if (reader.getConnectionState() == ConnectionState.Connected){//我们刚刚连接,所以现在配置我们想要的设备configureReaderDevice();} isScanning = false;updateUIByConnectionState (); } // This is called after scanning has completed, either by detecting a barcode, canceling the scan by using the on-screen button or a hardware trigger button, or if the scanning timed-out @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("START SCANNING"); resultListAdapter.notifyDataSetChanged(); } // This is called when a MX-1xxx device has became available (USB cable was plugged, or MX device was turned on), // or when a MX-1xxx that was previously available has become unavailable (USB cable was unplugged, turned off due to inactivity or battery drained) @Override public void onAvailabilityChanged(ReaderDevice reader) { if (reader.getAvailability() == Availability.AVAILABLE) { connectToReaderDevice(); } else if (reader.getAvailability() == Availability.UNAVAILABLE) { AlertDialog.Builder alert = new AlertDialog.Builder(this); alert .setTitle("Device became unavailable") .setPositiveButton("OK", null) .create() .show(); } }
使用下面的工厂方法初始化MX阅读器的Reader Device对象:
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中定义的CameraMode类型CameraMode.java它接受下表中列出的值之一。
这些模式为阅读器提供以下默认设置:
根据所选择的模式,设置额外的照明选项和行为,也列在表中。
价值 | 描述 | 照明 | 直播预览 |
---|---|---|---|
NO_AIMER | 初始化阅读器使用移动设备屏幕上的实时流预览,以便用户可以将条形码定位在相机的视野内进行检测和解码。如果移动设备没有瞄准配件,请使用此模式。 | 照明是可用的,一个按钮来控制它是可见的直播流预览。 | 显示 |
如果将命令发送给阅读器以进行瞄准器控制,则会忽略它们。 | |||
PASSIVE_AIMER | 初始化阅读器使用被动瞄准器。在这种模式下,设备屏幕上没有直播预览,因为瞄准模式是投影的。 | 照明是不可用的,直播预览没有照明按钮。 | 不显示 |
如果命令被发送到阅读器进行照明控制,它们将被忽略,因为在这种模式下,假定移动设备的内置LED正在用于瞄准器。 | |||
FRONT_CAMERA | 初始化阅读器以使用移动设备的前置摄像头(如果可用)。使用此配置时要小心,因为大多数前置摄像头没有自动对焦和照明,并且提供的图像分辨率明显较低。照明在此模式下不可用。 | 使用前置摄像头。 | 显示 |
照明是不可用的,直播预览没有照明按钮。 | |||
如果命令被发送给阅读器用于瞄准或照明控制,它们将被忽略。 |
的PreviewOption参数类型为PreviewOption中定义的PreviewOption.java,用于更改读取器的默认值或覆盖从所选的派生的默认值CameraMode.您可以指定以下选项:
价值 | 描述 |
---|---|
违约 | 接受CameraMode设置的所有默认值。 |
NO_ZOOM_BUTTON | 隐藏直播预览中的缩放按钮,阻止用户调整移动设备摄像头的缩放。 |
NO_ILLUMINATION_BUTTON | 隐藏直播预览中的照明按钮,防止用户切换照明。 |
HARDWARE_TRIGGER | 启用模拟硬件触发器(音量降低按钮),用于在移动设备上启动扫描。这个按钮只有在按下时才开始扫描,它不需要像专用扫描仪的触发器一样保持,并且第二次按下它不会停止扫描过程。 |
停顿了一下 | 如果使用实时流预览,则显示预览startScanning ()方法调用,但是阅读器在用户按下屏幕上的按钮开始扫描过程之前不会开始解码。 |
ALWAYS_SHOW | 强制显示实时流预览,即使选择了瞄准模式(例如CameraMode == PASSIVE_AIMER)。 |
HIGH_RESOLUTION | 使用更高分辨率的设备摄像头,将默认的1280x720分辨率在支持的设备上更改为1920x1080,在不支持的设备上更改为默认分辨率。这有助于扫描小条形码,但增加了解码时间,因为在每帧中有更多的数据需要处理。 |
HIGH_FRAME_RATE | 使用设备的相机在60帧每秒,而不是默认的30帧每秒,以提供更流畅的相机预览。 |
SHOW_CLOSE_BUTTON | 在局部视图中显示关闭按钮。 |
的ViewGroup(可选)参数指定实时流预览的容器。如果参数为左零,则使用全屏预览。
的RegistrationKey(可选)参数用于使用您拥有的许可密钥许可您的SDK
的CustomData(可选)参数用于自定义跟踪
例子
创建一个阅读器,没有瞄准,没有缩放按钮,并使用一个软触发:
readerDevice =阅读器设备。getPhoneCameraDevice(this, CameraMode.NO_AIMER, PreviewOption.NO_ZOOM_BUTTON | PreviewOption.PAUSED);
这开始与扫描仪暂停预览和软触发按钮切换扫描。按下软触发按钮后,预期的预览外观是这样的:
图像中的取景器由于具有设置的活动符号而具有活动扫描表面。有关详细信息,请参见使象征学.
在Android 6.0及以上版本中,您需要向用户请求访问移动设备内置摄像头的权限。
如果由于权限问题而无法打开摄像机,则onConnectionCompleted (readerDevice错误)回调包含CameraPermissionException在error参数中。方法检查此异常类型运算符操作员并请求活动内的许可。
如果(error instanceof CameraPermissionException) ActivityCompat.requestPermissions(((ScannerActivity) this), new String[]{Manifest.permission. permission. permission. error)相机},REQUEST_PERMISSION_CODE);
您需要实现ActivityCompat。OnRequestPermissionResultCallback接口来捕获用户权限结果。
中处理用户响应onRequestPermissionResult(…),您可以使用以下代码重试连接到手机摄像头:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){//检查权限请求的结果。如果用户允许,连接readerDevice If (requestCode == REQUEST_PERMISSION_CODE) {If (grantResults.;)长度> 0 && grantResults[0] == packagemanager . permission_grant) {if (readerDevice != null && readerDevice. getconnectionstate () != ConnectionState.Connected) readerDevice.connect(ScannerActivity.this);} else {if (activitypat . shouldshowrequestpermissionrationale (((ScannerActivity) this), Manifest.permission.CAMERA)) {AlertDialog. AlertDialog。Builder Builder = new AlertDialog.Builder(this) . setmessage("你需要允许访问相机"). setpositivebutton ("OK", new DialogInterface. onclicklistener () {@Override public void onClick(DialogInterface, DialogInterface, int i) {activitycompate . requestpermissions (ScannerActivity. permission)。this, new String[]{Manifest.permission。相机},REQUEST_PERMISSION_CODE);}}) .setNegativeButton("Cancel", null);AlertDialog dialog = builder.create();dialog.show ();} } } }
连接前,请设置ReaderDeviceListener对象来接收事件:
readerDevice.setReaderDeviceListener(这个);
具体操作请参见步骤3设置您的应用程序以使用康耐视移动条形码SDK用于Android.
此外,您可以启用从阅读器发送最后触发的图像和SVG:
readerDevice.enableImage(真正的);readerDevice.enableImageGraphics(真正的);
类初始化后调用connect方法ReaderDevice并设置一个侦听器方法来处理来自阅读器的响应。connect方法取OnConnectionCompletedListener参数:
//确保设备已打开并准备就绪readerDevice.connect(ScannerActivity.this);
方法调用以下侦听器方法ReaderDevice状态信息:
public void onconnectionstatechange (ReaderDevice阅读器);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类:
setSymbologyEnabled(最终的Symbology,最终的boolean启用,最终的OnSymbologyListener侦听器)。DATAMATRIX, true, null);readerDevice.setSymbologyEnabled(象征。UPC_EAN, true, null);
此方法中用于symbology参数的所有符号都可以在ReaderDevice.java.
例子
/*启用QR扫描*/ readerDevice.setSymbologyEnabled(symbologyenabled)QR, true, null);
你也可以使用相同的方法来禁用符号:
/ *禁用代码25扫描*/ readerDevice.setSymbologyEnabled(symbologyenabled)C25, false, null);
您可以实现的方法OnSymbologiesListener要查看符号更改的结果:
@Override public void onSymbologyEnabled(ReaderDevice reader, Symbology Symbology, Boolean enabled, Throwable error) {if (error != null){/*不成功,可能当前设备不支持该符号,或者ReaderDevice和MX设备之间的连接有问题*/}else{//成功}}
如果你的阅读器配备了照明灯,你可以控制它们:当扫描开始时,你可以打开或关闭它们。使用Reader Device对象的以下方法:
readerDevice。setLightsOn(true, null);
的接口方法OnLightsListener,这是该方法的第二个参数。
公共类ScannerActivity扩展AppCompatActivity实现....OnLightsListener……{…@Override public void onLightsOnCompleted(ReaderDevice reader, Boolean on, Throwable error) {if (error != null){//不成功}else{//成功}}}
如果使用移动设备的内置摄像头作为读取设备,您可以配置缩放级别及其使用方式。有三个缩放级别:
的设置相机。变焦-PERCENT [100-MAX] [100-MAX]命令用于配置两个级别缩放百分比的程度。100是不缩放的,MAX(高达1000)在设备的能力范围内进行缩放。第一个参数用于设置1级缩放,第二个参数用于设置2级缩放。
可以查看当前的缩放设置让相机。变焦-PERCENT命令,它返回两个值:级别1和级别2缩放。
例子
readerDevice.getDataManSystem()。sendCommand(“设置相机。变焦% 250 - 500”);
获取/设置相机。变焦0 - 2设置缩放级别或返回实际设置的另一个命令。SET命令的可能值有:
您可以在扫描之前甚至在扫描期间调用此命令,缩放将上升到配置的级别。如果扫描完成,该值将重置为正常行为(0)。
例子
readerDevice.getDataManSystem()。sendCommand(“设置相机。放大2”);
当使用移动设备的摄像头时,cmbSDK允许您在预览容器内或全屏中查看摄像头预览。这个预览还包含一个可定制的覆盖。cmbSDK相机覆盖层具有缩放、闪烁和关闭扫描仪的按钮,以及指示扫描超时的进度条。
使用cmbSDK v2.0中最初使用的遗留相机覆盖。x和ManateeWorks SDK, use this property from MWOverlay before initializing the readerDevice:
MWOverlay。overlayMode = MWOverlay.OverlayMode.OM_LEGACY;
当使用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”);
译码器。center - window命令用于设置(或获取)居中窗口的大小。数字以图像的百分比表示。centerX和centerY定义定心窗口在图像中的中间位置。sizeX和sizeY定义居中窗口的大小。
如果条形码触及居中窗口,则被接受。条形码不必包含在窗口中,但只需触摸它。缺省值[50 50 10 10]。
例子
readerDevice.getDataManSystem()。sendCommand(“设置解码器。居中窗50 50 55“);
译码器。DISPLAY-TARGET命令用于设置(或获取)是否应该在SVG结果上显示居中窗口。默认为关闭
例子
readerDevice.getDataManSystem()。sendCommand(“设置解码器。DISPLAY-TARGET”);
以下是目标解码启用时扫描预览的示例:
定心窗口(矩形)的颜色和宽度可以通过:
MWOverlay。targetRectLineColor = Color.RED;MWOverlay。targetRectLineWidth = 2;
如果您想一次扫描多个条码,在一个扫描会话中,您可以使用多码模式。该模式可从cbmSDK v.2.2.x中获得。要配置此模式,需要使用4个DMCC。在有效连接到阅读器设备后使用它们:
获取/设置多码。NUM-CODES命令用于设置读取成功后必须查找的码数。缺省值为1。
例子
readerDevice.getDataManSystem()。sendCommand(“多码。NUM-CODES 3”);
获取/设置多码。PARTIAL-RESULTS命令用于设置读取器如何解释要查找的代码数。如果找到1个或多个代码,ON = reader将返回一个成功的读取。如果找到的代码数等于MULTICODE,则OFF = reader将返回一个成功的读取。NUM-CODES价值。默认为关闭。
例子
readerDevice.getDataManSystem()。sendCommand(“多码。部分结果”);
获取/设置解码器。REREAD-NOT-LAST-N命令用于定义N,如果该代码在最后N次读取中被读取,则不读取。默认为0,没有限制。
例子
readerDevice.getDataManSystem()。sendCommand(“设置解码器。REREAD-NOT-LAST-N 1 ");
获取/设置多码。MAX-NUM-CODES命令用于为每个符号组1 - 5设置期望的最大代码数:
任何单一符号的期望值都不能超过MULTICODE参数。NUM-CODES,要查找的代码总数。第一个参数是符号组,第二个参数是代码的最大数目。默认情况下,all为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 ()方法来设置要使用的解析器类型,或者getParser ()获取选定类型。在与阅读器设备的有效连接之后设置解析器类型。默认为None。
例子
readerDevice.setParser (ResultParser.AAMVA);
在ReadResult对象的onReadResultReceived回调函数中启用所需的解析器类型后,您可以从收到的结果中获得结构化格式:
//从结果中返回json格式的解析文本getresultat (0).getParsedJSON();//从结果中返回解析后的文本getresultat (0).getParsedText();
如果你想编辑/调整扫描过程中感兴趣的区域大小,而你使用手机相机作为阅读器设备,你可以使用(GET|SET)译码器。% [x % y % h] DMC命令(可从cmbSDK v2.2.x获取),其中X和Y表示每个轴上RoI的起始点,wh表示从起始点开始的RoI宽度和高度,值为百分比。检查0-100的范围,宽度和高度的最小值5,以及参数之间隐含的约束,例如给定轴的总和不超过100。在与阅读器设备的有效连接后使用此DMCC。
例子
readerDevice.getDataManSystem()。sendCommand(“设置解码器。10% 10 ~ 80”);
康耐视扫描设备实现数据控制命令(DataMan Control Commands, DMCC),用于配置和控制设备。设备的每个功能都可以使用这种基于文本的语言来控制。API提供了向设备发送DMCC命令的方法。设置和查询配置属性命令。
的附录包括相机读取器的完整DMCC参考。
下面的示例显示了发送到设备的不同DMCC,以便进行更高级的配置。
例子
//将扫描方向改为全向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接口,可选参数。
公共类扫描器扩展活动实现....OnResetConfigListener……{…@Override public void onResetConfigCompleted(ReaderDevice reader, Throwable error) {if (error != null){//不成功}else{//成功}}
当条形码被成功读取时onReadResultReceived方法创建并返回一个ReadResult对象。如果在单个图像或帧上成功读取多个条形码,则多个ReadResult对象返回ReadResult对象。
ReadResult类具有描述读取条形码结果的属性:
当扫描结束而没有成功读取时,aReadResult与goodRead属性设置为false。
属性中填充image和imageGraphics属性ReadResult对象,设置相应的enableImage ()和/或enableImageGraphics ()的性质ReaderDevice对象。
要访问扫描条形码中的原始字节,可以使用XML属性。字节以Base64 String的形式存储在“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。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(打开哔哔声) | |||
获取/设置 | 相机。变焦 | 0 - 2 | SET命令的可能值为:0 - normal(未缩放),1 -zoom(级别1),2 -zoom(级别2)。此缩放级别在扫描期间使用。当扫描结束时,它复位为0。 |
N/A | x | ||
获取/设置 | 相机。变焦-PERCENT | [100 - max] [100 - max) | 设置/返回1级缩放(Android默认为150%,iOS默认为200%)2级缩放(Android默认300%,iOS默认400%)。 注意:相机需要从sdk启动至少一次,以具有适当的最大变焦能力(max)值。 |
N/A | x | ||
获取/设置 |
CODABAR。CODESIZE |
ON min max |
接受任何长度的Codabar。 |
N/A | X |
||
获取/设置 |
C11。CHKCHAR |
开bbbboff |
打开/关闭代码11校验数字。 |
从 | X |
||
获取/设置 |
C11。CHKCHAR-OPTION |
1 2 |
需要单个校验和。需要双重校验和。 |
1 | X |
||
获取/设置 |
C11。CODESIZE |
ON min max |
接受任何长度Code 11。 |
N/A | X |
||
获取/设置 |
这件。CODESIZE |
ON min max |
接受任何长度Code 25。 |
N/A | X |
||
获取/设置 |
C39。美国信息交换标准代码 |
开bbbboff |
打开/关闭Code 39扩展ASCII。 |
从 | |||
获取/设置 |
C39。CODESIZE |
ON min max |
接受任何长度Code 39。 |
N/A | |||
获取/设置 |
C39。CHKCHAR |
开bbbboff |
打开/关闭代码39校验数字 |
从 | |||
获取/设置 |
C93。美国信息交换标准代码 |
开bbbboff |
打开/关闭代码93扩展ASCII |
从 | X |
||
获取/设置 |
C93。CODESIZE |
ON min max |
接受任何长度代码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 | |||||
获取/设置 |
数据。结果类型 |
|
指定要返回的结果(多个值的总和): |
1 | |||
获取/设置 |
DATABAR。扩大 |
开bbbboff |
打开/关闭数据库扩展符号。 |
在 | |||
获取/设置 |
DATABAR。有限的 |
开bbbboff |
打开/关闭DataBar Limited符号。 |
从 | |||
获取/设置 |
DATABAR。RSS14 |
开bbbboff |
打开/关闭databarrss14符号。 |
从 | X |
||
获取/设置 |
DATABAR。RSS14STACK |
开bbbboff |
打开/关闭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 |
返回康耐视分配给扫描设备的设备ID。 对于内置摄像头,SDK返回53。 |
N/A | ||||
获取/设置 |
设备。名字 |
返回分配给设备的名称。默认情况下,这是“MX-”加上DEVICE.SERIAL-NUMBER的最后6位数字。 |
|
||||
得到 |
设备。串行-数 |
返回设备的序列号。对于内置摄像头,SDK分配一个伪随机数。 |
N/A | ||||
得到 |
设备。类型 |
返回康耐视分配给扫描设备的设备名称。对于内置摄像头,SDK返回“MX-Mobile”。 |
N/A | ||||
获取/设置 |
的焦点。FOCUSTIME |
清廉 |
设置相机的自动对焦周期(相机应该尝试重新对焦的频率)。 |
3. | |||
获取/设置 |
I2O5。CHKCHAR |
开bbbboff |
将交叉2 / 5位检查数字打开/关闭。 |
从 | |||
获取/设置 |
I205。CODESIZE |
ON min max |
接受任何长度的交叉5的2。 |
N/A | X |
||
获取/设置 |
的形象。格式 |
0 |
扫描仪以位图格式返回图像结果。 |
1 (JPEG) | |||
获取/设置 |
的形象。质量 |
10,15,20,90 |
指定JPEG图像质量。 |
50 | |||
获取/设置 |
的形象。大小 |
0 |
扫描仪返回全尺寸图像。 |
1(1/4尺寸) | |||
获取/设置 |
光。瞄准手 |
0 - 1 |
禁用/启用瞄准器(当扫描仪启动时)。 |
基于cameraMode的默认值:0:NoAimer和FrontCamera 1:被动aimer和主动aimer |
|||
获取/设置 | 光。瞄准手-TIMEOUT | 0 - 600 | Aimer超时时间,单位为秒。 | N/A | |||
获取/设置 |
光。内部,使 |
开bbbboff |
启用/禁用照明(当扫描仪启动时)。 |
从 | |||
获取/设置 |
MSI。CHKCHAR |
开bbbboff |
打开/关闭MSI Plessey检查数字。 |
从 | |||
获取/设置 |
MSI。CHKCHAR-OPTION |
0 |
使用mod 10校验和 |
0 |
|
||
获取/设置 |
MSI。CODESIZE |
ON min max |
接受任何长度的MSI Plessey。 |
N/A | X |
||
获取/设置 |
的象征。AZTECCODE |
开bbbboff |
开启/关闭阿兹特克密码符号。 |
从 | |||
获取/设置 |
的象征。CODABAR |
开bbbboff |
打开/关闭Codabar符号。 |
从 | |||
获取/设置 |
的象征。C11 |
开bbbboff |
打开/关闭代码11符号。 |
从 | X |
||
获取/设置 |
的象征。C128 |
开bbbboff |
打开/关闭代码128符号。 |
从 | |||
获取/设置 |
的象征。这件 |
开bbbboff |
打开/关闭代码25符号(标准)。 |
从 | |||
获取/设置 |
的象征。C39 |
开bbbboff |
打开/关闭代码39符号。 |
从 | |||
获取/设置 |
的象征。C93 |
开bbbboff |
打开/关闭代码93符号。 |
从 | |||
获取/设置 |
的象征。鸡笼 |
开bbbboff |
打开/关闭COOP符号(代码25变体)。 |
从 | X |
||
获取/设置 |
的象征。DATAMATRIX |
开bbbboff |
打开/关闭数据矩阵符号。 |
从 | |||
获取/设置 |
的象征。DATABAR |
开bbbboff |
打开/关闭数据库扩展和有限符号。 |
从 | |||
获取/设置 |
的象征。DOTCODE |
开bbbboff |
打开/关闭DotCode符号。 |
从 | |||
获取/设置 |
的象征。国际航空运输协会 |
开bbbboff |
打开/关闭IATA符号(代码25变体)。 |
从 | X |
||
获取/设置 |
的象征。倒 |
开bbbboff |
打开/关闭反转符号(代码25变体)。 |
从 | X |
||
获取/设置 |
的象征。ITF14 |
开bbbboff |
打开/关闭ITF-14符号(代码25变体)。 |
从 | X |
||
获取/设置 |
的象征。UPC-EAN |
开bbbboff |
打开/关闭UPC-A、UPC-E、EAN-8和EAN-13符号。 |
从 | |||
获取/设置 |
的象征。矩阵 |
开bbbboff |
打开/关闭矩阵符号(代码25变体)。 |
从 | X |
||
获取/设置 |
的象征。MAXICODE |
开bbbboff |
打开/关闭MaxiCode符号。 |
从 | X |
||
获取/设置 |
的象征。MSI |
开bbbboff |
打开/关闭MSI Plessey符号。 |
从 | |||
获取/设置 |
的象征。PDF417 |
开bbbboff |
打开/关闭PDF417符号。 |
从 | |||
获取/设置 |
的象征。地球 |
开bbbboff |
打开/关闭行星符号。 |
从 | |||
获取/设置 |
的象征。POSTNET |
开bbbboff |
打开/关闭POSTNET符号。 |
从 | |||
获取/设置 |
SYMBOL.4STATE-IMB |
开bbbboff |
打开/关闭智能邮件条码符号。 |
从 | |||
获取/设置 |
SYMBOL.4STATE-RMC |
开bbbboff |
打开/关闭皇家邮政编码符号。 |
从 | |||
获取/设置 |
的象征。QR |
开bbbboff |
打开/关闭QR和MicroQR符号。 |
从 | |||
获取/设置 |
触发器。类型 |
0 |
单(不支持) |
2(手动) | |||
获取/设置 |
UPC-EAN。EAN13 |
开bbbboff |
打开/关闭EAN-13符号。 |
在 | X |
||
获取/设置 |
UPC-EAN。EAN8 |
开bbbboff |
打开/关闭EAN-8符号。 |
在 | X |
||
获取/设置 |
UPC-EAN。UPC-A |
开bbbboff |
打开/关闭UPC-A符号。 |
在 | X |
||
获取/设置 |
UPC-EAN。UPC-E |
开bbbboff |
打开/关闭UPC-E符号。 |
在 | X |
||
获取/设置 |
UPC-EAN。UPCE1 |
开bbbboff |
打开/关闭UPC-E1符号。 |
从 | |||
获取/设置 |
UPC-EAN。补充 |
0 |
关闭UPC补充代码(忽略) |
0 | |||
获取/设置 | 振动。好 | 开bbbboff | 设置/获取读取代码时是否震动(默认为ON) | N/A |
安装康耐视产品时,请遵守以下注意事项,以降低受伤或设备损坏的风险: