2017-05-07 85 views
0

當前正試圖使用​​ZXing Mobile爲Xamarin Forms構建應用程序。在Xamarin Forms應用程序中使用ZXing Mobile

編譯的代碼沒有問題。但是,試圖將Android設備上運行的時候,我得到了以下錯誤:

An unhandled exception occcured. 

日誌顯示以下內容:

[0:] Binding: 'DefaultOverlayTopText' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.TopText' 
[0:] Binding: 'DefaultOverlayBottomText' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.BottomText' 
[0:] Binding: 'DefaultOverlayShowFlashButton' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.ShowFlashButton' 
[0:] Binding: 'DefaultOverlayTopText' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.TopText' 
[0:] Binding: 'DefaultOverlayBottomText' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.BottomText' 
[0:] Binding: 'DefaultOverlayShowFlashButton' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.ShowFlashButton' 

我這是怎麼實現的:

scanButton.Clicked += async (sender, args) => 
      { 
       var options = new MobileBarcodeScanningOptions 
       { 
        AutoRotate = false, 
        UseFrontCameraIfAvailable = false, 
        TryHarder = true 
       }; 
       var scanPage = new ZXingScannerPage(options) 
       { 
        DefaultOverlayTopText = "Align the barcode within the frame", 
        DefaultOverlayBottomText = string.Empty, 
        DefaultOverlayShowFlashButton = true 
       }; 
       // Navigate to our scanner page 
       await Navigation.PushAsync(scanPage); 

       scanPage.OnScanResult += (result) => 
       { 
        // Stop scanning 
        scanPage.IsScanning = false; 

        // Pop the page and show the result 
        Device.BeginInvokeOnMainThread(async() => 
        { 
         await Navigation.PopAsync(); 
         await DisplayAlert("Scanned Barcode", result.Text, "OK"); 
        }); 
       }; 
      }; 

還增加以下是Android的主要活動,位於Xamarin自己的Init上方:

ZXing.Net.Mobile.Forms.Android.Platform.Init(); 

任何幫助表示讚賞。謝謝。

+0

什麼版本的斑馬線您使用的是? Nuget或組件?你是否也要求獲得相機的許可? – apineda

+0

該版本是2.2.9。通過Nuget安裝。是的,權限被添加到'AndroidManifest.xml'上。 – ipohfly

回答

1

我試過了你的代碼,發現這個錯誤與導航更相關。

您正在使用

await Navigation.PushAsync (scanPage); 

確保您所呼叫從其中包含NavigationPage如果不是,你將有崩潰的網頁此方法。

爲了解決這個問題,你可以使用

await Navigation.PushModalAsync (scanPage); 

代替,這不需要NavigationPage和顯示的將是模態的結果頁面。使用上面的代碼你還需要改變你「彈出」視圖的方式。

await Navigation.PopModalAsync (true); 

注:

工作,即使你會出現在日誌中這些消息。

[0:] Binding: 'DefaultOverlayTopText' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.TopText' 
[0:] Binding: 'DefaultOverlayBottomText' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.BottomText' 
[0:] Binding: 'DefaultOverlayShowFlashButton' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.ShowFlashButton' 
[0:] Binding: 'DefaultOverlayTopText' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.TopText' 
[0:] Binding: 'DefaultOverlayBottomText' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.BottomText' 
[0:] Binding: 'DefaultOverlayShowFlashButton' property not found on 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay', target property: 'ZXing.Net.Mobile.Forms.ZXingDefaultOverlay.ShowFlashButton' 

希望這helps.-

+0

謝謝。不知道錯誤是關於缺少'NavigationPage'。不知道爲什麼錯誤信息並不意味着.. – ipohfly

相關問題