Windows10 Dev - Esperienza connessa

Come già sappiamo, in Windows 10 possiamo creare un'applicazione che può essere eseguita ed eseguita su più dispositivi Windows 10. Supponiamo di avere questi diversi dispositivi e vogliamo far sembrare che si tratti di un'applicazione anche se è in esecuzione su dispositivi diversi.

Nella piattaforma UWP (Universal Windows Platform), puoi eseguire una singola applicazione su tutti i dispositivi Windows 10 e puoi dare all'utente la sensazione che sia un'unica applicazione. Questo è noto comeconnecting experience.

Caratteristiche importanti dell'esperienza connessa -

  • Windows 10 è il primo passo verso un'era di elaborazione più personale in cui app, servizi e contenuti possono spostarsi con te su tutti i dispositivi, in modo semplice e senza interruzioni.

  • Con l'esperienza connessa, puoi condividere facilmente i tuoi dati e le impostazioni personali relative a tale applicazione e sarà disponibile su tutti i dispositivi.

In questo capitolo impareremo:

  • dove questi dati o impostazioni condivisi verranno archiviati in modo che possano essere disponibili sui dispositivi per quell'unica applicazione.

  • come viene identificato l'utente; che è lo stesso utente che utilizza la stessa applicazione su dispositivi diversi.

Windows 10 fa un coraggioso passo avanti. Quando accedi a Windows 10 con un account Microsoft (MSA) o con il tuo account aziendale o (di lavoro), si presume che:

  • Hai accesso gratuito a OneDrive per account MSA e hai accesso ad Active Directory (AD) e Azure Active Directory (AAD), che è una versione cloud con il tuo account aziendale.

  • Hai accesso a diverse applicazioni e risorse.

  • I dispositivi e le applicazioni sono in stato e impostazioni di roaming.

Roaming in Windows 10

Quando accedi a un PC, imposti alcune preferenze come la schermata di blocco o il colore di sfondo o personalizzi i diversi tipi di impostazioni. Se hai più di un computer o dispositivo in esecuzione su Windows 10, le tue preferenze e impostazioni su un dispositivo verranno sincronizzate dal cloud, quando accedi ad altri dispositivi con lo stesso account.

In Windows 10, dopo aver impostato o personalizzato le impostazioni dell'applicazione, queste impostazioni verranno eseguite in roaming con le API di roaming disponibili in UWP. Quando esegui di nuovo la stessa applicazione su un altro dispositivo, questa recupererà prima le impostazioni e applicherà tali impostazioni all'applicazione su quel dispositivo.

Esiste un limite di 100 KB per il caricamento dei dati in roaming nel cloud. Se questo limite viene superato, la sincronizzazione si interromperà e si comporterà come una cartella locale.

Il RoamingSettings Le API vengono esposte come dizionario in cui un'applicazione può salvare i dati.

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";

Quando i dati cambiano in RoamingSettings quindi spara il DataChanged evento, dove puoi aggiornare le tue impostazioni.

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

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

Vediamo un esempio, in cui imposteremo il colore di sfondo dell'applicazione e queste impostazioni eseguiranno il roaming con le API di roaming disponibili in UWP.

Di seguito è riportato il codice XAML in cui vengono aggiunti diversi controlli.

<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>

Implementazione C # per RoamingSettings e di seguito sono riportati diversi eventi.

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(); 
      } 
		
   } 
}

Quando il codice sopra è stato compilato ed eseguito, vedrai la seguente finestra.

Scegliamo il colore grigio come colore di sfondo e chiudiamo questa app.

Ora, quando esegui questa app su questo dispositivo o su qualsiasi altro dispositivo, vedrai che il colore di sfondo è cambiato in grigio. Ciò mostra che l'app ha recuperato con successo le informazioni sul cambiamento del colore di sfondo inRoamingSettings.