要开始开发Xamarin应用程序,首先需要安装Visual Studio或Xamarin Studio,并确保包含所有必要的Xamarin组件。对于本例,我们将使用Visual Studio。在这链接您可以逐步阅读如何下载和安装VisualStudioforXamarin应用程序。
在本节中,我们具有基本解释该演示项目的开发方式。如果您需要更详细的解释和有关对象和方法的更多信息,请查看此操作链接
完成安装后,打开Visual Studio并遵循以下步骤:
1.去文件->新建->项目。
2.创建手机应用程序(Xamarin.Forms)。
3.选择空白应用程序模板安卓和iOS平台和.NET标准代码共享策略。
该解决方案包含三个项目:
1.便携式类库(PCL)项目
可移植类库(PCL)是一种特殊类型的项目,可以跨不同的CLI平台使用,如Xamarin.iOS和Xamarin.Android,以及WPF、Universal Windows平台和Xbox。受目标平台的限制,该库只能利用完整.NET framework的一个子集。
2.Android平台特定应用程序项目
安卓特定于平台的项目必须引用绑定Xamarin.Android平台SDK所需的程序集,以及核心共享代码项目。
3. IOS平台特定的应用程序项目
iOS特定于平台的项目必须引用绑定Xamarin所需的程序集。iOS平台SDK,以及Core,共享代码项目。
在我们的便携式项目中主页这里列出了所有的主要列表,productitempage.其中显示了特定列表的所有产品,editmodalpage.是一个自定义的弹出窗口来编辑列表/产品名称,MainListItem和ProductListItem模型显示列表/产品的列表项,以及ScannerControl.自定义视图控制。
ScannerControl.是一个继承自Xamarin.Forms.View控件的类,我们添加了一些额外的自定义属性和事件处理程序。稍后我们将实现自定义渲染器在特定于平台的项目中。
这里我们使用ScannerControl.在productitempage.添加新的或编辑现有项目。
首先在代码中,我们需要初始化,连接和配置scannerControl以便开始扫描过程
与scannerControl.StartScanning ()我们开始扫描过程
在这个项目中,我们将设置我们需要为Android平台所需的所有设置(最小Android版本,目标Android版本,App名称,包名称..),需要我们需要的权限,为Android平台添加资源,为Android平台创建自定义渲染器必威随行版官网, 等等..
首先我们要检查相机根据此应用程序所需的权限。
接下来将在可绘制文件夹中添加必威随行版官网资源(我们在可移植项目中使用的资源)。
现在我们需要参考XamarinDataManLibrary.dll以便使用cmbSDK。
在编写这篇文档的时候,在android平台上有一个Xamarin Forms导航栏图标的bug,这就是为什么在这个项目中我们对Toolbar.axml以及导航页的自定义渲染器(CustomNavigationRenderer)。
在这里,我们将为Android平台创建ScannerControl的自定义渲染器(PCL自定义控件)。您不需要编辑这个类。在您的项目中使用相同的方法
[assembly: Xamarin.Forms.ExportRenderer(typeof(ShoppingCart. scannercontrol), typeof(ShoppingCart. droid . scannercontrol))]命名空间ShoppingCart。Droid {public class 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平台设置我们需要的所有设置(部署目标,应用程序名称,bundle标识符..),需要我们需要的权限,添加资产,为ios平台创建自定义渲染器,等等…
开放info.plist.带有一些文本编辑器的文件并添加以下行:
NSCameraUsageDescription 用于扫描的摄像头。
NSCameraUsageDescription键适用于相机许可。
下一步将在资源目录中添加新图标,并将创建一个名为ScannerImages并在目录中添加图标
现在我们需要参考XamarinDataManLibrary.dll以便使用cmbSDK。
ScannerControl.类的自定义呈现器ScannerControl (PCL定制控制)在iOS平台。
[汇编:xamarin.forms.exportRenderer(typeof(shoppecart.scannercontrol),typeof(shoppingcart.ios.scannercontrol))]命名空间shoppercart.ios {public class scannercontrol:ViewRenderer ,IcmBreaderDeviceLegate {私有UIView容器;私有CMBreaderDevice ReaderDevice;私有CDMCamerAmode摄像机= CDMCAMERAMODE.NOAIMER;私人UialertController ConnectingAlert;Private NSObject DIDBECOMEACTIVEOBSERVER;受保护的覆盖void InelementChanged(ElementChangedEventargs e){base.oneLementChanged(e);if (e.o oldelement != null || Element == null) {return;container = new uiview();if(control == null)setNativeControl(容器);......
如果你打算使用CMBSDK.要使用智能手机或平板电脑(没有MX移动终端)进行移动扫描,SDK需要安装许可密钥。没有许可密钥,SDK仍然可以运行,但扫描结果会被模糊化(SDK会用星号字符随机替换扫描结果中的字符)。
请与您的康耐视销售代表联系,了解如何获取许可密钥,包括可用于评估SDK 30天的试用许可。
在获得许可密钥后,有两种方式将许可密钥添加到应用程序中。
为Android平台打开manifest文件并在application标签中添加这个meta标签
或者你可以在创建相机扫描器时直接从代码中注册SDK
/ /创建一个私人空白CreateScannerDevice扫描设备 () { //*************************************************************************************** // 创建一个照相扫描器/ / / /注意:SDK需要许可证密钥。参考/ / SDK文档获得许可证密钥以及方法/ /传递的关键SDK(在这个例子中,我们依靠一个条目在/ / plist.info androidmanifest.xml——也SDK密钥可以通过/ /在这个(GetPhoneCameraDevice)构造函数)作为参数。//*************************************************************************************** scannerControl.GetPhoneCameraDevice (ScannerCameraMode。NoAimer ScannerPreviewOption。违约,假的,“SDK_KEY”);//连接到设备scanercontrol .Connect();}
为iOS平台开放info.plist.file and add this key
MX\u MOBILE\u许可证 您的许可证密钥
或者你可以在创建相机扫描器时直接从代码中注册SDK
/ /创建一个私人空白CreateScannerDevice扫描设备 () { //*************************************************************************************** // 创建一个照相扫描器/ / / /注意:SDK需要许可证密钥。参考/ / SDK文档获得许可证密钥以及方法/ /传递的关键SDK(在这个例子中,我们依靠一个条目在/ / plist.info androidmanifest.xml——也SDK密钥可以通过/ /在这个(GetPhoneCameraDevice)构造函数)作为参数。//*************************************************************************************** scannerControl.GetPhoneCameraDevice (ScannerCameraMode。NoAimer ScannerPreviewOption。违约,假的,“SDK_KEY”);//连接到设备scanercontrol .Connect();}
这个演示使用cordova插件构建与Cognex移动条码SDK。
Cognex移动条码SDK (cmbSDK)是一个简单而强大的工具,用于开发移动条码扫描应用程序。
基于Codgex的旗舰DataMan技术和康涅克交条码扫描SDK,CMBSDK.为开发人员提供了强大的工具来创建用于移动扫描装置的整个范围内的条形码扫描应用程序:从智能手机和片剂的性能高,工业条形码扫描器的MX线。
通过遵循一些简单的指导原则,开发人员可以编写应用程序,在任何受支持的MX移动终端或智能手机上工作,只需要很少或没有条件代码。SDK通过“读取器”连接层抽象设备来实现这一点:一旦应用程序与所需的读取器建立了连接,就会使用一个单一的、统一的API来配置和接口设备。
SDK提供了两个基本读者:用于条形码的“MX读取器”,用于使用MX-1000和MX-1502等设备,以及使用移动设备的内置摄像机的条形码扫描的“摄像机读取器”。
这是一个关于整合的一个例子CMBSDK.在离子移动应用程序中。
离子用于混合,跨平台移动应用程序开发利用HTML和JavaScript呈现用户界面,同时电容器让我们能够轻松地创建运行在iOS、Android和web上的现代web应用。
这为开发人员提供了可跨平台执行的可重用代码。它对电容器和PhoneGap /科尔多瓦支持对每个平台的本机访问的插件。本练习的目的是试图展示如何将Cognex移动条码扫描器SDK用于使用Ionic跨平台框架构建的真实应用程序。
您现在可以下载我们的示例应用程序
NPM安装
npm安装cmbsdk-cordova
离子电容器添加android
离子电容器运行android
如果我们想使用live reload运行
离子电容器运行android -l -外部
离子电容器
离子电容器构建ios
一旦构建完成,XCode将被打开。NSCameraUsageDescription 扫描必选
7.3如果您在MX移动终端上使用cmbSDK,还需要添加支持的外部附属协议或UISupportedExternalAccessoryProtocols来com.cognex.dmcc在你的项目的info.plist.. (在这种情况下,在Apple app Store中发布应用之前,您必须创建MFi请求。您可以在中阅读更多详细信息。)让你的MX移动终端启用应用程序进入应用程序商店部分。)
<键> UISupportedExternalAccessoryProtocols < /关键> <字符串> com.cognex.dmcc字符串> < /
7.4从XCode或使用CLI命令运行应用程序
离子电容器运行ios
也许第一个参观的地方,是cmbscanner。位于
/project_folder/src/providers/cmbscanner/cmbscanner.ts.
这是我们配置所有各种CMBSDK设置的地方。
作为使用cmbSDK的一般规则,我们希望在全局中启用符号或更改输出默认值setConnectionStateDidChangeOfReaderCallback。一旦我们接收到connectionState = connected,我们就可以使用我们想要启用的符号或其他任何我们打算使用的设置来实现魔法。
cmbScanner。setConnectionStateDidChangeOfReaderCallback ((connectionState:数量)= > {this.events.publishConnectionChange (connectionState)如果(connectionState = = cmbScanner.CONSTANTS.CONNECTION_STATE_CONNECTED){/ /图像结果应设置后我们有一个连接到读者cmbScanner.enableImage (this.settings.enableImage);cmbScanner.enableImageGraphics (this.settings.enableImageGraphics);this.settings.enabledSymbols.forEach((v) => {this.所有完成。真正的setSymbologyEnabled (v)。然后((symbResult: any) => {return symbResult;}));});Promise.all (this.allDone)。然后(results =>{//当所有的语句都说了并做了这个时。结束= 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)或ios的plist文件中添加密钥:
或者IOS平台
该应用程序有两种连接模式。将使用相机手机作为扫描仪的相机连接器,以及MX连接器,它将使用MX设备作为扫描仪
它还有两种触发模式。您可以扫描代码并获得结果,或者保持连续模式并在扫描项被添加到列表时继续扫描。
本示例还使用了Capacitor存储服务。我们希望我们的设置是持久的,但又不想把事情弄得太复杂,这就是为什么电容存储服务非常适合我们的任务。
使用存储,我们可以保存扫描结果,并在以后重用(或检查)。