Как часть приложения, которое я разрабатываю, я хочу иметь возможность переключаться между использованием передней или задней камеры, но из-за моих поисков и попыток я не смог заставить его работать с помощью передней камеры.
Сканер, выполняющий сканирование, - это вид от ZXing. Net .Mobile.Forms, называемый ZXingScannerView, определен в моем xaml примерно так, вместе с кнопкой, которая должна переключать камеру.
<elements:AdvancedTabbedPage
...
xmlns:elements="clr-namespace:Wolf.Utility.Main.Xamarin.Elements;assembly=Wolf.Utility.Main"
xmlns:forms="clr-namespace:ZXing.Net.Mobile.Forms;assembly=ZXing.Net.Mobile.Forms">
...
<ContentPage>
<ContentPage.ToolbarItems>
<ToolbarItem Text="{x:Static resources:AppResources.CameraFlipText}" x:Name="CameraFlipButton" Clicked="CameraFlipButton_OnClicked"/>
</ContentPage.ToolbarItems>
<ContentPage.Content>
...
<forms:ZXingScannerView x:Name="ScannerView" HeightRequest="200" IsAnalyzing="False" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" IsVisible="False" IsScanning="True"/>
...
</ContentPage.Content>
</ContentPage>
Кнопка видна в правом верхнем углу на следующем изображении, в то время как вид сканера виден только при включенном сканировании, которого нет на изображении.
Изображение Страница, на которой происходит сканирование
Нажатие на кнопку должно переключаться между использованием передней и задней камеры, с передней по умолчанию. Однако, нажав кнопку, похоже, ничего не происходит, кроме записи в мой журнал Код для события Clicked кнопки можно увидеть ниже.
...
private void CameraFlipButton_OnClicked(object sender, EventArgs e)
{
Logging.Log(LogType.Information, "Flipping Camera...");
Config.DefaultOptions.UseFrontCameraIfAvailable = !Config.DefaultOptions.UseFrontCameraIfAvailable;
Config.CustomOptions.UseFrontCameraIfAvailable = !Config.CustomOptions.UseFrontCameraIfAvailable;
if (!ScanningToggle.IsToggled) return;
Logging.Log(LogType.Information, "Restarting Scanning...");
ScanningToggle.IsToggled = false;
ScanningToggle.IsToggled = true;
}
Параметры, упомянутые в приведенном выше коде, определены так же в моем классе Config. Дополнительные значения в элементе CustomOptions установлены в моем методе Init моего класса Config, но они не имеют отношения к этому вопросу.
public class Config
{
...
public static MobileBarcodeScanningOptions CustomOptions = new MobileBarcodeScanningOptions() { UseFrontCameraIfAvailable = true };
public static MobileBarcodeScanningOptions DefaultOptions = new MobileBarcodeScanningOptions() { UseFrontCameraIfAvailable = true };
...
}
Параметры, которые будет использовать мой сканер, всегда выбираются между этими двумя, в зависимости от нескольких пользовательских вводов в настройках.
Пытаясь заставить его работать, я также пытался ...
Инвертировать значение UseFrontCameraIfAvailable, пока сканирование выполняется выполняется
Инвертировать значение UseFrontCameraIfAvailable в параметрах, используемых для запуска сканирования и последующего перезапуска сканирования - код, показанный выше.
Изменить IsScanning ZXingScannerView из true в false, при перезапуске сканирования с измененными параметрами, но это только привело к зависанию камеры.
Нашел один , как я был о том, чтобы задать вопрос. Я попытаюсь последовать этому примеру завтра, но мне все равно очень понравятся мои входные данные.
Не стесняйтесь задавать вопросы или запрашивать дополнительный код, если я что-то пропустил, что вы думаете, может помощь.