Я пытаюсь различить устройство, находящееся в альбомном или портретном режиме.Повороты на 180 ° для меня не имеют значения, просто какая сторона длиннее.
Я пробовал
SimpleOrientation OReading = SimpleOrientationSensor.GetDefault().GetCurrentOrientation();
if(OReading == SimpleOrientation.NotRotated || OReading == SimpleOrientation.Rotated180DegreesCounterclockwise)
ApplicationData.Current.LocalSettings.Values["Orientation"] = "Landscape";
if (OReading == SimpleOrientation.Rotated90DegreesCounterclockwise || OReading == SimpleOrientation.Rotated270DegreesCounterclockwise)
ApplicationData.Current.LocalSettings.Values["Orientation"] = "Portrait";
, но первая строка уже выбрасывает исключение NullReferenceException.Каков будет правильный способ сделать это?
У меня есть компонент .NET, который технически может выполнить это, но я бы предпочел сделать это в UWP, если это возможно.
Обратите внимание, что яя не работаю в симуляторе, но запускаю приложение на устройстве, которое поддерживает вращение.
Хотя мне фактически не нужны данные датчика, я просто хочу знать, какова ориентация экрана, которая может отличатьсяиз данных датчика.
Редактировать:
public async void ChangedAsync(AppResourceGroupInfoWatcher sender, AppResourceGroupInfoWatcherExecutionStateChangedEventArgs args)
{
DisplayInformation current = DisplayInformation.GetForCurrentView();
Это также не работает, и в UWP это дает мне сбой
Windows.Graphics.Display: GetForCurrentView должен вызываться в потоке, связанном с CoreWindow.
Функция вызывается AppResourceGroupInfoWatcher.
Я использую:
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using Windows.ApplicationModel;
using Windows.Foundation;
using Windows.Foundation.Metadata;
using Windows.Graphics.Display;
using Windows.Storage;
using Windows.System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
с таргетингом на версию 1803