2017-01-24 5 views
0

Я пытаюсь реализовать пакет Zuging.Net для чтения штрих-кодов из моего приложения.ZXing.Net не работает на Xamarin Android

Я использую версию фрагмента, и она помещается правильно, но на ней отображается только оверлей, изображение камеры просто черное.

Ive искал около и только нашел что-то о разрешении фонарика ...

Это мой код:

scannerFragment = new ZXingScannerFragment(); 
//scannerFragment.CustomOverlayView = CustomOverlayView; 
scannerFragment.UseCustomOverlayView = false; 
scannerFragment.TopText = ""; 
scannerFragment.BottomText = ""; 
FindViewById(Resource.Id.imgBarcode).Visibility = ViewStates.Visible; 
SupportFragmentManager.BeginTransaction().Replace(Resource.Id.frameScanner, scannerFragment, "ZXINGFRAGMENT").Commit(); 
MobileBarcodeScanningOptions ScanningOptions = new MobileBarcodeScanningOptions(); 
ScanningOptions.PossibleFormats = new List<ZXing.BarcodeFormat> { ZXing.BarcodeFormat.EAN_8, ZXing.BarcodeFormat.CODE_128 }; 
if (ScanningOptions.AutoRotate.HasValue && !ScanningOptions.AutoRotate.Value) 
{ 
    RequestedOrientation = ScreenOrientation.Nosensor;    
} 
scannerFragment.StartScanning(result => 
{ 
    var h = ScanCompletedHandler; 
    if (h != null) 
    { 
     h(result); 
    } 
    if (!ZxingActivity.ScanContinuously) 
    { 
     SupportFragmentManager.BeginTransaction().Remove(scannerFragment); 
    } 
}, ScanningOptions); 

И у меня есть это в манифесте:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.FLASHLIGHT" /> 

I будет пытаться использовать способ действия вместо фрагмента, на всякий случай, если он будет работать.

Камера устройства прекрасно работает, почему я получаю черный экран?

EDIT

Он работает на версии полноэкранного, используя этот код:

MobileBarcodeScanner.Initialize(Application); 
var scanner = new ZXing.Mobile.MobileBarcodeScanner(); 
var result = await scanner.Scan(); 

Любая идея, почему это не работает в качестве фрагмента?

+0

Вы используете [это] (https://components.xamarin.com/view/zxing.net.mobile)? – Pikoh

+0

@Pikoh im, используя это: https://www.nuget.org/packages/ZXing.Net.Mobile – Nanoc

ответ

1

Похоже, что транзакция фрагмента еще не завершена. В documentation состояния:

После FragmentTransaction совершается с FragmentTransaction.commit(), он должен быть казнен асинхронно на главном потоке процесса. Если вы хотите, чтобы немедленно выполнял такие ожидающие операции, вы можете вызвать эту функцию (только из основного потока), чтобы сделать это. Обратите внимание, что все обратные вызовы и другие связанные с ними действия будут выполняться в рамках этого вызова, поэтому будьте осторожны с тем, откуда это вызывается.

Вы можете попробовать позвонить ExecutePendingTransactions() после Commit(), чтобы заставить FragmentTransaction закончить, прежде чем вы пытаетесь получить доступ фрагмент.

+0

Отличная находка. Это очень большая проблема и не нашла решения в другом месте по этой причине. Я получил из-за этого проблема сканирования не работала, и это спасло блок. –

1

SupportFragmentManager.ExecutePendingTransactions() после Commit() работал для меня.

Смежные вопросы