[UWP - How To] Detectar orientación

octubre 20, 2016 Christian Amado 0 Comentarios

Básicamente en esta entrada, lo que deseo demostrar es cómo detectar cambios en la orientación de nuestros dispositivos Windows. En líneas generales necesitamos utilizar los sensores del dispositivo. Por lo tanto, debemos agregar la librería:
  • Windows.Devices.Sensors

Ahora bien, necesitamos verificar la orientación actual. Para ello, escribimos la siguiente rutina en el evento Page_Load de MainPage.xaml:

private void Page_Loaded(object sender, RoutedEventArgs e)
{
    //Obtenemos la orientación actual
    string orientacion = (Windows.Graphics.Display.DisplayInformation.GetForCurrentView().CurrentOrientation.ToString());
new Windows.UI.Popups.MessageDialog("Orientación: " + orientacion).ShowAsync();
}
Ahora bien, para poder detectar cambios, no nos queda otro camino que utilizar un Timer, el cual permite lanzar un evento cada X intervalo de tiempo. Para este caso, en el evento Tick del Timer verificaremos si la posición a cambiado o no, si ha cambiado procedemos a mostrar un mensaje (que en tu caso puede agregar el código necesario allí).

A continuación, muestro el código completo:
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.Graphics.Display;

namespace UWP_Orientacion
{
    public sealed partial class MainPage : Page
    {
        DispatcherTimer timer = new DispatcherTimer();
        private DisplayOrientations orientacionAlmacenada;

        public MainPage()
        {
            this.InitializeComponent();

            timer.Interval = new System.TimeSpan(0, 0, 5);
        }

        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            timer.Tick += Timer_Tick;
            timer.Start();
        }

        private void Timer_Tick(object sender, object e)
        {
            var orientationSensor = Windows.Graphics.Display.DisplayInformation.GetForCurrentView();// SimpleOrientationSensor.GetDefault();
            if (orientationSensor != null)
            {
                var orientacionActual = orientationSensor.CurrentOrientation;
                if (orientacionActual == orientacionAlmacenada)
                    return;

                orientacionAlmacenada = orientacionActual;
                new Windows.UI.Popups.MessageDialog("Orientación: " + orientacionAlmacenada.ToString()).ShowAsync();
            }
        }
    }
}
De esta manera, hemos logrado capturar el cambio de orientación en una aplicación UWP para cualquier dispositivo con Windows 10.