要开始开发Xamarin应用程序,首先需要安装Visual Studio或Xamarin Studio,并确保包含所有必要的Xamarin组件。对于本例,我们将使用Visual Studio。在这链接你可以一步一步地阅读如何下载和安装Xamarin应用程序的Visual Studio。
在本节中,我们将基本解释这个演示项目是如何开发的。如果你需要更详细的解释和更多关于对象和方法的信息,请查看这个链接
安装完成后,打开Visual Studio,按照以下步骤操作:
1.去File ->新建->项目。
2.创建手机应用(Xamarin.Forms)。
3.选择空白应用程序的模板安卓而且iOS平台和net标准代码共享策略。
该方案包含三个项目:
1.便携式类库(PCL)项目
可移植类库(Portable Class Library, PCL)是一种特殊类型的项目,可以跨Xamarin等不同的CLI平台使用。iOS和Xamarin。安卓, as well as WPF, Universal Windows Platform, and Xbox. The library can only utilize a subset of the complete .NET framework, limited by the platforms being targeted.
2.Android平台特定应用程序项目
安卓特定于平台的项目必须引用绑定Xamarin所需的程序集。Android平台SDK,以及Core,共享代码项目。
3.iOS平台专用应用项目
iOS特定于平台的项目必须引用绑定Xamarin所需的程序集。iOS平台SDK,以及Core,共享代码项目。
在我们的便携式项目中主页所有主要列表都在这里,ProductItemPage其中显示了特定列表的所有产品,EditModalPage是一个自定义弹出窗口编辑列表/产品名称,MainListItem而且ProductListItem模型显示列表/产品的列表项,以及ScannerControlcustom视图控件。
ScannerControl是继承自Xamarin.Forms.View控件的类,我们添加了一些额外的自定义属性和事件处理程序。稍后我们将实现自定义渲染器在特定于平台的项目中。
这里我们使用ScannerControl在ProductItemPage添加新项或编辑现有项。
在代码后面,首先我们需要初始化,连接和配置scannerControl以便开始扫描进程
与scannerControl.StartScanning ()我们开始扫描过程
在这个项目中,我们将设置所有的设置,我们需要android平台(最低安卓版本,目标安卓版本,应用程序名称,包名..),要求我们需要的权限,为安卓平台添加资源,为安卓平台创建自定义渲染器等。必威随行版官网
首先我们检查一下相机此应用程序所需的权限。
接下来将在可绘制文件夹中添加必威随行版官网资源(我们在可移植项目中使用)。
现在我们需要引用XamarinDataManLibrary.dll才能使用cmbSDK。
在写这篇文档的时候,在android平台上,Xamarin表单的导航栏图标有一个bug,这就是为什么在这个项目中,我们有一个小的修改Toolbar.axml并且有一个导航页的自定义渲染器(CustomNavigationRenderer).
在这里,我们将为Android平台的ScannerControl (PCL自定义控件)创建自定义渲染器。您不需要编辑这个类。在您的项目中使用相同的方法
[assembly: Xamarin.Forms.ExportRenderer(typeof(ShoppingCart. scannercontrol), typeof(ShoppingCart. droid . scannercontrol))]命名空间购物车。Droid{公共类ScannerControl: ViewRenderer<购物车。ScannerControl, RelativeLayout>, IOnConnectionCompletedListener, IReaderDeviceListener, IOnSymbologyListener { private RelativeLayout rlMainContainer; private ReaderDevice readerDevice; private bool availabilityListenerStarted = false; private static Bitmap svgBitmap; public ScannerControl(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs e) { base.OnElementChanged(e); if (e.OldElement != null || Element == null) { return; } rlMainContainer = new RelativeLayout(Context) { LayoutParameters = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MatchParent, RelativeLayout.LayoutParams.MatchParent) }; ...
在这个项目中,我们将设置所有的设置,我们需要ios平台(部署目标,应用程序名称,包标识符..),要求我们需要的权限,添加资产,为ios平台创建自定义渲染器,等等…
开放Info.plist使用文本编辑器文件并添加以下行:
NSCameraUsageDescription 用于扫描的摄像头
NSCameraUsageDescription关键字是摄像许可。
接下来将在Assets目录中添加新图标,并创建另一个名为ScannerImages并在目录中添加图标
现在我们需要引用XamarinDataManLibrary.dll才能使用cmbSDK。
ScannerControl类的自定义呈现器扫描控件(PCL自定义控件)iOS平台。
[assembly: Xamarin.Forms.ExportRenderer(typeof(ShoppingCart. scannercontrol), typeof(ShoppingCart. ios . scannercontrol))]命名空间购物车。iOS{公共类ScannerControl: ViewRenderer, ICMBReaderDeviceDelegate { private UIView container; private CMBReaderDevice readerDevice; private CDMCameraMode cameraMode = CDMCameraMode.NoAimer; private UIAlertController connectingAlert; private NSObject didBecomeActiveObserver; protected override void OnElementChanged(ElementChangedEventArgs e) { base.OnElementChanged(e); if (e.OldElement != null || Element == null) { return; } container = new UIView(); if (Control == null) SetNativeControl(container); ...
如果您计划使用cmbSDK使用智能手机或平板电脑(没有MX移动终端)进行移动扫描,SDK需要安装许可密钥。没有许可密钥,SDK仍将运行,尽管扫描结果将被模糊化(SDK将随机地将扫描结果中的字符替换为星号字符)。
请与您的康耐视销售代表联系,了解如何获取许可证密钥,包括可用于30天评估SDK的试用许可证。
获得许可密钥后,有两种方法将许可密钥添加到应用程序中。
为Android平台打开清单文件并在应用程序标记中添加此元标记
或者你可以直接从代码注册你的SDK,当你创建相机扫描仪
/ /创建一个私人空白CreateScannerDevice扫描设备 () { //*************************************************************************************** // 创建一个照相扫描器/ / / /注意:SDK需要许可证密钥。参考// SDK的文档获取许可密钥,以及//传递密钥到SDK的方法(在这个例子中,我们依赖于// plist.info和androidmanifest.xml中的一个条目——也SDK密钥可以作为这个(GetPhoneCameraDevice)构造函数的参数传递)。//*************************************************************************************** scannerControl.GetPhoneCameraDevice (ScannerCameraMode。NoAimer ScannerPreviewOption。默认值,false, "SDK_KEY");//连接到设备scannerControl.Connect();}
为iOS平台开放Info.plistfile and add this key
MX_MOBILE_LICENSE 您的license密钥 . key>MX_MOBILE_LICENSE
或者你可以直接从代码注册你的SDK,当你创建相机扫描仪
/ /创建一个私人空白CreateScannerDevice扫描设备 () { //*************************************************************************************** // 创建一个照相扫描器/ / / /注意:SDK需要许可证密钥。参考// SDK的文档获取许可密钥,以及//传递密钥到SDK的方法(在这个例子中,我们依赖于// plist.info和androidmanifest.xml中的一个条目——也SDK密钥可以作为这个(GetPhoneCameraDevice)构造函数的参数传递)。//*************************************************************************************** scannerControl.GetPhoneCameraDevice (ScannerCameraMode。NoAimer ScannerPreviewOption。默认值,false, "SDK_KEY");//连接到设备scannerControl.Connect();}
这个演示使用了与康耐视移动条码SDK一起工作的cordova插件。
康耐视移动条码SDK (cmbSDK)是一种用于开发移动条码扫描应用程序的简单而强大的工具。
基于康耐视的旗舰DataMan技术和康耐视条码扫描SDKcmbSDK为开发人员提供了一个强大的工具来创建条码扫描应用程序的整个移动扫描设备范围:从智能手机和平板电脑到MX系列的高性能,工业条码扫描仪。
通过遵循一些简单的指导原则,开发人员可以编写可以在任何受支持的MX移动终端或智能手机上工作的应用程序,只需很少或根本没有条件代码。SDK通过“阅读器”连接层抽象设备来实现这一点:一旦应用程序与所需的阅读器建立了连接,就会使用单一、统一的API来配置设备并与设备交互。
SDK提供了两个基本读取器:一个“MX读取器”,用于使用MX-1000和MX-1502等设备进行条形码扫描;一个“相机读取器”,用于使用移动设备的内置摄像头进行条形码扫描。
这是一个关于如何积分的例子cmbSDK在Ionic移动应用程序中。
离子用于混合的、跨平台的移动应用程序开发,利用HTML和JavaScript来呈现用户界面,而电容器这使得构建在iOS、Android和web上本机运行的现代web应用程序变得容易。
这为开发人员提供了可跨平台执行的可重用代码。它与电容器而且PhoneGap /科尔多瓦支持对每个平台的本地访问的插件。本练习的目标是尝试展示如何在使用Ionic跨平台框架构建的实际应用程序中使用康耐视移动条码扫描器SDK。
您现在可以下载我们的示例应用程序
npm安装
NPM安装cmbsdk-cordova
离子电容器添加android
离子电容器运行机器人
如果我们想运行实时重载
离子电容器运行android -l—external
离子电容器
离子电容器
一旦构建完成,XCode将被打开。NSCameraUsageDescription Required for Scanning . NSCameraUsageDescription
7.3如果您使用MX移动终端的cmbSDK,还需要添加支持的外部附属协议或UISupportedExternalAccessoryProtocols来com.cognex.dmcc在项目的Info.plist.(在这种情况下,你必须在苹果应用商店发布应用之前创建MFi请求。你可以阅读更多的细节让MX移动终端应用进入应用商店部分。)
<键> UISupportedExternalAccessoryProtocols < /关键> <字符串> com.cognex.dmcc字符串> < /
7.4通过XCode或者CLI命令运行app
离子电容器运行ios
可能第一个参观的地方是cmbscanner。Ts提供程序,它位于
/ / cmbscanner / cmbscanner.ts project_folder / src /提供者
这是我们配置所有各种cmbSDK设置的地方。
在使用cmbSDK时,我们希望启用符号或更改全局中的默认输出,这是一条通用规则setConnectionStateDidChangeOfReaderCallback。一旦我们接收到connectionState = connected,我们就可以使用我们想要启用的符号或任何我们想要使用的其他设置来执行魔法。
cmbScanner。setConnectionStateDidChangeOfReaderCallback((connectionState: number) => {this.events.publishConnectionChange(connectionState) if (connectionState == cmbScanner.CONSTANTS.CONNECTION_STATE_CONNECTED){//图像结果应该在我们连接到READER之后设置cmbScanner.enableImage(this.settings.enableImage);cmbScanner.enableImageGraphics (this.settings.enableImageGraphics);this.settings.enabledSymbols.forEach((v) => {this.allDone.push(cmbScanner. push)真正的setSymbologyEnabled (v)。then((symbResult: any) =>{返回symbResult;}));});Promise.all (this.allDone)。然后(results =>{//当所有这些都说了和做了。isDone = true;//设置isDone标志}); this.connected = true; cmbScanner.setTriggerType(this.settings.triggerType); } else if (connectionState == cmbScanner.CONSTANTS.CONNECTION_STATE_DISCONNECTED) { this.connected = false; } });
如果您有一个有效的许可密钥,您就会想使用它之前loadScanner()。
cmbScanner.registerSDK(“关键”);//您可以在这里添加您的许可密钥
或者,你可以直接在manifest文件(android)或plist文件(ios)中添加密钥:
或者是IOS平台
该应用程序有两种连接模式。相机连接器将使用照相手机作为扫描仪,MX连接器将使用MX设备作为扫描仪
它也有两种触发模式。您可以扫描代码并返回结果,或者保持连续模式并继续扫描,同时扫描的项目被添加到列表中。
本例还使用了Capacitor存储服务。我们希望我们的设置是持久的,但又不想让事情过于复杂,这就是为什么电容存储服务非常适合我们的任务。
通过使用存储,我们可以保存扫描结果,并在以后的日期重用(或检查)。