我正在使用 Xamarin Forms 和 Prism 为 MVVM 结构开发移动应用程序。 我有一个 TC51 Zebra 设备,我需要拦截条形码扫描事件。 SDK已正确安装在项目中,但在线示例适用于 Xamarin.Android,而不是 Xamarin.Forms。 我不知道如何将扫描的条形码从 Android 项目发送到可移植项目类。
现在我在 MainActivity.cs(Android 项目)中有这个“发送调用”:
void scanner_Data(object sender, Scanner.DataEventArgs e)
{
ScanDataCollection scanDataCollection = e.P0;
if ((scanDataCollection != null) && (scanDataCollection.Result == ScannerResults.Success))
{
IList <ScanDataCollection.ScanData> scanData = scanDataCollection.GetScanData();
foreach (ScanDataCollection.ScanData data in scanData)
{
Xamarin.Forms.MessagingCenter.Send<Xamarin.Forms.Application, string>((Xamarin.Forms.Application)Xamarin.Forms.Application.Current, "Barcode", data.Data);
}
}
}
我的 ViewModel(可移植项目)构造函数中的代码:
Xamarin.Forms.MessagingCenter.Subscribe<Xamarin.Forms.Application, string>(Xamarin.Forms.Application.Current, "Barcode", (sender, arg) => { _pageDialogService.DisplayAlertAsync("Test Scan", "Data Received: " + arg, "OK"); });
当我尝试读取此页面中的条形码时,应用程序崩溃。
我还有另一个问题:现在我将 SDK 包含在项目中,该应用程序无法在其他设备上运行,它在启动时崩溃。我需要一个单一的应用程序,支持 TC51 Zebra 设备的条码扫描仪,以及支持其他没有集成条码扫描仪硬件的设备的相机条码扫描。可能吗?
最佳答案
我认为你可以做这样的事情。
在您的 MainActivity.cs 中
private App _my_application;
protected override void OnCreate (Bundle savedInstanceState)
{
// .... various things....
global::Xamarin.Forms.Forms.Init (this, savedInstanceState);
_my_application = new App ();
LoadApplication (my_application);
}
void scanner_Data(object sender, Scanner.DataEventArgs e)
{
ScanDataCollection scanDataCollection = e.P0;
if ((scanDataCollection != null) && (scanDataCollection.Result == ScannerResults.Success))
{
IList <ScanDataCollection.ScanData> scanData = scanDataCollection.GetScanData();
foreach (ScanDataCollection.ScanData data in scanData)
{
MessagingCenter.Send<App, string> (my_application, "ScanBarcode", data.Data);
}
}
}
然后,在您的“ContentPage”中
protected override void OnAppearing ()
{
base.OnAppearing ();
// Enable receive barcode
MessagingCenter.Subscribe<App, string> (this, "ScanBarcode", (sender, arg) => {
// In "arg" there is your barcode
try
{
Device.BeginInvokeOnMainThread(() =>
{
DisplayAlert("BARCODE READ", arg, "OK");
});
}
catch(Exception ex){
System.Diagnostics.Debug.WriteLine(ex.Message);
}
});
}
protected override void OnDisappearing ()
{
base.OnDisappearing ();
// Disable receive barcode
MessagingCenter.Unsubscribe<App, string> (this, "ScanBarcode");
}
关于c# - Xamarin Forms 中的 TC51 Zebra 设备条形码扫描问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45488460/