我正在嘗試以我的 Xamarin 表單實作條形碼掃描,但沒有成功。
我可以讓相機正常作業,但我在螢屏上看不到紅線,它只是拒絕掃描任何東西
我試過這個答案。我可以通過我的相機看到,但沒有出現紅線。但我可以打開和關閉手電筒
XAML 代碼:
<Button BackgroundColor="Chocolate" Clicked="Button_Clicked"/>
<zxing:ZXingScannerView
x:Name="_scanView"
OnScanResult="Handle_OnScanResult"
IsScanning="true"
IsAnalyzing="true"
WidthRequest="200"
HeightRequest="200" />
C#代碼:
private void Button_Clicked(object sender, EventArgs e)
{
_scanView.ToggleTorch();
}
private void Handle_OnScanResult(ZXing.Result result)
{
ChassisEntry.Text = result.Text;
}
// this is in the constructor of the page
MobileBarcodeScanningOptions options = new ZXing.Mobile.MobileBarcodeScanningOptions()
{
TryHarder = true,
PossibleFormats = new List<ZXing.BarcodeFormat>() { ZXing.BarcodeFormat.All_1D }
};
_scanView.Options = options;
我錯過了什么?
編輯
我有這個在我的MainActivity.cs
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
ZXing.Net.Mobile.Forms.Android.Platform.Init();
LoadApplication(new App());
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
ZXing.Net.Mobile.Forms.Android.PermissionsHandler.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
除了答案
@Rafeal 的答案對我有用,唯一的問題是掃描視圖上沒有紅線。
我workaround為那個問題找到了這個。
但是,這是一種解決方法,因為我注意到如果條形碼位于視圖中的任何位置,則掃描已經發生。
雖然這看起來可能不是問題,但在我的例子中,我有多達 20 個條形碼的紙質表格,當用戶想要瞄準特定的條形碼時,他可能會得到錯誤的條形碼。
因此,如果有人知道更好的解決方案,我想聽聽。
我將就這個問題提出一個單獨的問題。
這是我現在使用的解決方法
<Grid VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<zxing:ZXingScannerView
x:Name="_scanView"
OnScanResult="Handle_OnScanResult"
IsScanning="true"
WidthRequest="200"
HeightRequest="200"/>
<zxing:ZXingDefaultOverlay
x:Name="scannerOverlay"
BottomText="Place the red line over the barcode you'd like to scan.">
</zxing:ZXingDefaultOverlay>
</Grid>
uj5u.com熱心網友回復:
在我的作業專案中,我使用了這個 xaml 宣告:
<zxing:ZXingScannerView x:Name="qrCodeScannerView"
OnScanResult="Handle_OnScanResult"
IsScanning="true"
WidthRequest="1024"
HeightRequest="400" />
請注意,我沒有isAnalyzing像您那樣在 xaml 宣告中設定屬性。當頁面出現時,zxing 控制元件立即開始作業和分析。
然后在xaml.cs檔案中
public void Handle_OnScanResult(Result scanResult)
{
qrCodeScannerView.IsScanning = false;
// processing scanResult.Text here
}
protected override void OnAppearing()
{
base.OnAppearing();
qrCodeScannerView.IsScanning = true;
}
protected override void OnDisappearing()
{
base.OnDisappearing();
qrCodeScannerView.IsScanning = false;
}
這看起來很奇怪,但isScanning在 xaml.cs 檔案中設定屬性也為我解決了這個任務。
uj5u.com熱心網友回復:
嘗試從 XAML 中完全洗掉 ZXingScannerView。在按鈕的單擊事件上添加以下代碼:
private async void ButtonScan(object sender, EventArgs e)
{
PermissionStatus granted = await Permissions.CheckStatusAsync<Permissions.Camera>();
if (granted != PermissionStatus.Granted)
{
_ = await Permissions.RequestAsync<Permissions.Camera>();
}
if (granted == PermissionStatus.Granted)
{
try
{
MobileBarcodeScanner scanner = new MobileBarcodeScanner();
ZXing.Result result = await scanner.Scan();
if (result != null && result.Text != "")
{
//You access your scanned text with result.Text
scanner.Cancel(); // <--- This closes the scanner
}
}
catch (Exception)
{
await DisplayAlert("Problem", "Something went wrong.", "ΟΚ");
}
}
else
{
await DisplayAlert("Problem", "No permissions to use camera.", "ΟΚ");
}
}
編輯
OP提到我應該將這行代碼添加到我的答案中以使其正常作業。
在 MainActivity.cs 中,您必須像這樣初始化掃描儀:
ZXing.Mobile.MobileBarcodeScanner.Initialize(Application);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/424295.html
