Desarrollador de Windows10: experiencia conectada

Como ya sabemos, en Windows 10 podemos crear una aplicación que se puede ejecutar y ejecutar en múltiples dispositivos con Windows 10. Supongamos que tenemos estos dispositivos diferentes y queremos que parezca que es una aplicación aunque se esté ejecutando en diferentes dispositivos.

En la Plataforma universal de Windows (UWP), puede ejecutar una sola aplicación en todos los dispositivos con Windows 10 y puede darle al usuario la sensación de que es una sola aplicación. Esto se conoce comoconnecting experience.

Características importantes de la experiencia conectada:

  • Windows 10 es el primer paso hacia una era de informática más personal en la que sus aplicaciones, servicios y contenido pueden moverse con usted a través de dispositivos, sin problemas y fácilmente.

  • Con la experiencia conectada, puede compartir fácilmente sus datos y configuraciones personales relacionadas con esa aplicación y estará disponible en todos los dispositivos.

En este capítulo aprenderemos:

  • donde se almacenarán estos datos o configuraciones compartidos para que puedan estar disponibles en sus dispositivos para esa aplicación.

  • cómo se identifica al usuario; que es el mismo usuario el que está utilizando la misma aplicación en diferentes dispositivos.

Windows 10 da un paso adelante audaz. Cuando inicia sesión en Windows 10 con una cuenta de Microsoft (MSA) o con su cuenta empresarial o (laboral), se asume que:

  • Tiene acceso gratuito a la cuenta OneDrive para MSA y tiene acceso a Active Directory (AD) y Azure Active Directory (AAD), que es una versión en la nube con su cuenta empresarial.

  • Tienes acceso a diferentes aplicaciones y recursos.

  • Los dispositivos y las aplicaciones se encuentran en estado y configuración de roaming.

Roaming en Windows 10

Cuando inicia sesión en una PC, establece algunas preferencias como la pantalla de bloqueo o el color de fondo o personaliza sus diferentes tipos de configuraciones. Si tiene más de una computadora o dispositivo, que se ejecuta en Windows 10, sus preferencias y configuraciones en un dispositivo se sincronizarán desde la nube, cuando inicie sesión en otros dispositivos con la misma cuenta.

En Windows 10, cuando haya configurado o personalizado la configuración de su aplicación, esta configuración se desplazará con las API de itinerancia disponibles en UWP. Cuando ejecute la misma aplicación nuevamente en otro dispositivo, primero recuperará la configuración y aplicará esa configuración a la aplicación en ese dispositivo.

Existe un límite de 100 KB para cargar datos de roaming en la nube. Si se excede este límite, la sincronización se detendrá y se comportará como una carpeta local.

los RoamingSettings Las API se exponen como un diccionario en el que una aplicación puede guardar datos.

Windows.Storage.ApplicationDataContainer roamingSettings = 
   Windows.Storage.ApplicationData.Current.RoamingSettings;  
				   
// Retrivve value from RoamingSettings 
var colorName = roamingSettings.Values["PreferredBgColor"].ToString(); 
 
// Set values to RoamingSettings 
roamingSettings.Values["PreferredBgColor"] = "Green";

Cuando los datos cambian en RoamingSettings entonces dispara el DataChanged evento, donde puede actualizar su configuración.

Windows.Storage.ApplicationData.Current.DataChanged += RoamingDataChanged;  

private void RoamingDataChanged(Windows.Storage.ApplicationData sender, object args) {
   // Something has changed in the roaming data or settings 
}

Veamos un ejemplo, en el que estableceremos el color de fondo de la aplicación y esta configuración se desplazará con las API de roaming disponibles en UWP.

A continuación se muestra el código XAML en el que se agregan diferentes controles.

<Page 
   x:Class = "RoamingSettingsDemo.Views.MainPage" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:local = "using:RoamingSettingsDemo.Views" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d">
   
   <Grid x:Name = "MainGrid" Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
      <Grid.RowDefinitions> 
         <RowDefinition Height = "80" /> 
         <RowDefinition /> 
      </Grid.RowDefinitions>
		
      <StackPanel Orientation = "Horizontal" VerticalAlignment = "Top" Margin = "12,12,0,0"> 
         <TextBlock Style = "{StaticResource HeaderTextBlockStyle}"  
            FontSize = "24" Text = "Connected Experience Demo" /> 
      </StackPanel>
		
      <Grid Grid.Row = "1" Margin = "0,80,0,0"> 
         <StackPanel Margin = "62,0,0,0"> 
            <TextBlock x:Name = "textBlock" HorizontalAlignment = "Left"   
               TextWrapping = "Wrap" Text = "Choose your background color:"  
               VerticalAlignment = "Top"/> 
					
            <RadioButton x:Name = "BrownRadioButton" Content = "Brown"  
               Checked = "radioButton_Checked" /> 
					
            <RadioButton x:Name = "GrayRadioButton" Content = "Gray"  
               Checked = "radioButton_Checked"/> 
         </StackPanel> 
      </Grid> 
		
   </Grid> 
	
</Page>

Implementación de C # para RoamingSettings y diferentes eventos se dan a continuación.

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Runtime.InteropServices.WindowsRuntime; 

using Windows.Foundation; 
using Windows.Foundation.Collections; 

using Windows.UI; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Controls.Primitives; 
using Windows.UI.Xaml.Data; 
using Windows.UI.Xaml.Input; 
using Windows.UI.Xaml.Media; 
using Windows.UI.Xaml.Navigation;  

// The RoamingSettingsDemo Page item template is documented at 
   http://go.microsoft.com/fwlink/?LinkId=234238  

namespace RoamingSettingsDemo.Views {

   /// <summary>
      /// An empty page that can be used on its own or navigated to within a Frame. 
   /// </summary> 
	
   public sealed partial class MainPage : Page {
   
      public MainPage() {
         this.InitializeComponent(); 
      }  
		
      protected override void OnNavigatedTo(NavigationEventArgs e) {
         SetBackgroundFromSettings();  
         Windows.Storage.ApplicationData.Current.DataChanged += RoamingDataChanged; 
      }  
		
      protected override void OnNavigatedFrom(NavigationEventArgs e) {
         Windows.Storage.ApplicationData.Current.DataChanged -= RoamingDataChanged; 
      }  
		
      private void RoamingDataChanged(Windows.Storage.ApplicationData sender, object args) {
	  
         // Something has changed in the roaming data or settings 
         var ignore = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,  
            () ⇒ SetBackgroundFromSettings()); 
      } 
		
      private void SetBackgroundFromSettings() {
	  
         // Get the roaming settings 
         Windows.Storage.ApplicationDataContainer roamingSettings = 
            Windows.Storage.ApplicationData.Current.RoamingSettings;  
				   
         if (roamingSettings.Values.ContainsKey("PreferBrownBgColor")) {
            var colorName = roamingSettings.Values["PreferBrownBgColor"].ToString();
				
            if (colorName == "Gray") {
               MainGrid.Background = new SolidColorBrush(Colors.Gray); 
               GrayRadioButton.IsChecked = true; 
            } else if (colorName == "Brown") {
               MainGrid.Background = new SolidColorBrush(Colors.Brown); 
               BrownRadioButton.IsChecked = true; 
            } 
         } 
			
      } 
		
      private void radioButton_Checked(object sender, RoutedEventArgs e){ 
         if (GrayRadioButton.IsChecked.HasValue && 
            (GrayRadioButton.IsChecked.Value == true)) {
               Windows.Storage.ApplicationData.Current.RoamingSettings.
                  Values["PreferBrownBgCo lor"] = "Gray"; 
         } else {
            Windows.Storage.ApplicationData.Current.RoamingSettings.
               Values["PreferBrownBgCo lor"] = "Brown"; 
         }  
			
         SetBackgroundFromSettings(); 
      } 
		
   } 
}

Cuando se compile y ejecute el código anterior, verá la siguiente ventana.

Elija el color gris como color de fondo y cierre esta aplicación.

Ahora, cuando ejecute esta aplicación en este dispositivo o en cualquier otro dispositivo, verá que el color de fondo ha cambiado a gris. Esto muestra que la aplicación ha recuperado con éxito la información del cambio de color de fondo enRoamingSettings.