Android 设备上的 Zxing 条码扫描器使用 Xamarin.Forms
Zxing bar code scanner on Android device using Xamarin.Forms
我正在尝试在带有 xamarin 表单的 andorid 设备上使用 Zxing 代码扫描器。
创建了一个按钮来打开 Zxing 扫描仪页面。
然而当我这样写的时候。它向我发送了一个 unhandel exceptoin:
private void BtnPress_Clicked(object sender, EventArgs e)
{
goToScan();
}
private async void goToScan()
{
var scanPage = new ZXingScannerPage();
scanPage.OnScanResult += (result) => {
// Stop scanning
scanPage.IsScanning = false;
// Pop the page and show the result
Device.BeginInvokeOnMainThread(() => {
Navigation.PopAsync();
DisplayAlert("Scanned Barcode", result.Text, "OK");
});
};
// Navigate to our scanner page
await Navigation.PushAsync(scanPage);
}
}
但是,如果我将其移动到同步方式,则会出现此错误:
System.InvalidOperationException:Android 上不支持全局 PushAsync,请使用 NavigationPage。
附上我的代码:
private void goToScan()
{
var scanPage = new ZXingScannerPage();
scanPage.OnScanResult += (result) => {
// Stop scanning
scanPage.IsScanning = false;
// Pop the page and show the result
Device.BeginInvokeOnMainThread(() => {
Navigation.PopAsync();
DisplayAlert("Scanned Barcode", result.Text, "OK");
});
};
// Navigate to our scanner page
Navigation.PushAsync(scanPage);
}
}
如果我将 Navagation.push 异步更改为 PushModalAsync,如下所示:
Navigation.PushModalAsync(扫描页面);
我转到 Zxing 扫描仪页面,但它没有开始扫描。 (crusior事件不动。
我的主要 Andorid activity 看起来像这样:
[Activity(Label = "QRCode4", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
ZXing.Net.Mobile.Forms.Android.Platform.Init();
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
global::ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
感谢任何帮助。
您缺少 App.cs 上的导航:
MainPage = new NavigationPage(new YourFirstPage());
而不是简单地MainPage = new YourFirstPage();
我正在尝试在带有 xamarin 表单的 andorid 设备上使用 Zxing 代码扫描器。 创建了一个按钮来打开 Zxing 扫描仪页面。
然而当我这样写的时候。它向我发送了一个 unhandel exceptoin:
private void BtnPress_Clicked(object sender, EventArgs e)
{
goToScan();
}
private async void goToScan()
{
var scanPage = new ZXingScannerPage();
scanPage.OnScanResult += (result) => {
// Stop scanning
scanPage.IsScanning = false;
// Pop the page and show the result
Device.BeginInvokeOnMainThread(() => {
Navigation.PopAsync();
DisplayAlert("Scanned Barcode", result.Text, "OK");
});
};
// Navigate to our scanner page
await Navigation.PushAsync(scanPage);
}
}
但是,如果我将其移动到同步方式,则会出现此错误:
System.InvalidOperationException:Android 上不支持全局 PushAsync,请使用 NavigationPage。
附上我的代码:
private void goToScan()
{
var scanPage = new ZXingScannerPage();
scanPage.OnScanResult += (result) => {
// Stop scanning
scanPage.IsScanning = false;
// Pop the page and show the result
Device.BeginInvokeOnMainThread(() => {
Navigation.PopAsync();
DisplayAlert("Scanned Barcode", result.Text, "OK");
});
};
// Navigate to our scanner page
Navigation.PushAsync(scanPage);
}
}
如果我将 Navagation.push 异步更改为 PushModalAsync,如下所示: Navigation.PushModalAsync(扫描页面);
我转到 Zxing 扫描仪页面,但它没有开始扫描。 (crusior事件不动。
我的主要 Andorid activity 看起来像这样:
[Activity(Label = "QRCode4", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle bundle)
{
ZXing.Net.Mobile.Forms.Android.Platform.Init();
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
global::ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
感谢任何帮助。
您缺少 App.cs 上的导航:
MainPage = new NavigationPage(new YourFirstPage());
而不是简单地MainPage = new YourFirstPage();