【问题标题】:ZXing.Net not working on Xamarin AndroidZXing.Net 无法在 Xamarin Android 上运行
【发布时间】:2017-06-15 06:55:29
【问题描述】:

我正在尝试实现 ZXing.Net nuget 包以从我的应用中读取条形码。

我使用的是片段版本,它放置正确,但它只显示叠加层,相机图像只是黑色。

我搜索了一下,只发现了一些关于手电筒权限的东西......

这是我的代码:

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" />

我将尝试活动方式而不是片段,以防万一。

设备的摄像头工作正常,为什么会黑屏?

编辑

它正在使用此代码制作全屏版本:

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

知道为什么它不能作为片段工作吗?

【问题讨论】:

标签: c# xamarin.android zxing


【解决方案1】:

片段事务似乎尚未完成。 documentation 声明:

在 FragmentTransaction 提交后 FragmentTransaction.commit(),预定执行 在进程的主线程上异步。如果你想 立即执行任何此类挂起的操作,您可以调用它 函数(仅来自主线程)这样做。请注意,所有回调 和其他相关行为将在此调用中完成,所以 注意从哪里调用它。

您可以尝试在Commit() 之后调用ExecutePendingTransactions() 以强制FragmentTransaction 在您尝试访问片段之前完成。

【讨论】:

  • 很好的发现.. 这是一个非常大的问题,因此没有在其他地方找到解决方案.. 由于这个原因,我遇到了扫描无法正常工作的问题,这节省了块。
【解决方案2】:

SupportFragmentManager.ExecutePendingTransactions()Commit() 为我工作之后。

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    相关资源
    最近更新 更多