使用Zxing库扫描时,将屏幕方向锁定为竖屏,Xamarin.android应用程序。

3

我见过一些相机配置管理器可以完成这个功能,但不确定在哪里找到该文件?

我已经添加了:

          <activity android:name="MainActivity"

          android:configChanges="keyboardHidden|orientation" 

          android:screenOrientation="portrait"/>

现在主活动被锁定为竖屏,但是当从内部活动中运行zxing扫描器时,屏幕在扫描期间会旋转吗?

2个回答

5
将以下代码添加到您的主活动中以锁定方向:
[Activity (Label = "YourLabel", MainLauncher = true, ScreenOrientation = Android.Content.PM.ScreenOrientation.Landscape)]

使用以下代码更改方向:

if (scanning)
    RequestedOrientation = Android.Content.PM.ScreenOrientation.Portrait;

我发现 iOS 上有类似的代码可以实现此功能,但我从未弄清楚如何将其重置为当用户旋转设备时更改方向。在 Android 上你会怎么做? - hvaughan3
我的例子是针对Android的,每次想要改变方向时,请使用以下代码:RequestedOrientation = Android.Content.PM.ScreenOrientation.Portrait; // 或者 .Landscape;如果您需要更具体的示例,请向我展示您的代码,扫描何时开始以及何时结束。 - CDrosos
也许只是一个dll文件,代码ScreenOrientation = Android.Content.PM.ScreenOrientation.Landscape)能够锁定方向,或者扫描可以绕过即使在Activity中定义了这一行? - CDrosos
似乎我在旋转方面仍然没有什么成功,无论我尝试什么,在扫描屏幕启动后都会被忽略。 - Sam Ra

3

我解决了这个问题,最后很简单。我使用的是Zxing.net.mobile库,而不是稍有不同的zxing.net...

            var scanner = new MobileBarcodeScanner();
            scanner.TopText = "Scanning for Barcode...";
            var result = await scanner.Scan(new MobileBarcodeScanningOptions
            {
                AutoRotate = false
            });
            if (result != null)
            {
                _scan.ScanValue = result.ToString();
                _scan.Action = "Scan";
                await CallService();
            }
            else
            {
                scanner.Cancel();
                Recreate();
            }
        };

这很有效。


现在我想要一个扫描横向的选项!但是锁定在横向上。当使用autorotate=false时,它会从纵向开始并被锁定。我希望有一种方法可以在需要时从横向开始并锁定在横向上。 - Sam Ra
如果您首先执行 RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape; 然后将 autorotate 设置为 false,会发生什么? - CDrosos
那似乎不起作用,我在调用scanner.scan之前尝试过这个... 如果(scanner.Scan().Status == TaskStatus.Running) { RequestedOrientation = ScreenOrientation.Landscape; } - Sam Ra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接