Windows10 开发 - 互联体验


众所周知,在Windows 10中我们可以创建一个可以在多个Windows 10设备上执行和运行的应用程序。让我们假设我们有这些不同的设备,并且我们想让它感觉像是一个应用程序,即使它在不同的设备上运行。

在通用 Windows 平台 (UWP) 中,可以在所有 Windows 10 设备上运行单个应用程序,并且可以给用户一种感觉,即它是一个应用程序。这就是所谓的连接体验

互联体验的重要特征 -

  • Windows 10 是迈向个人计算时代的第一步,您的应用程序、服务和内容可以跨设备无缝、轻松地移动。

  • 借助互联体验,您可以轻松共享与该应用程序相关的数据和个人设置,并且它将在所有设备上可用。

在本章中我们将学习 -

  • 这些共享数据或设置将存储在其中,以便可以在您的设备上用于该应用程序。

  • 如何识别用户;同一用户在不同设备上使用相同的应用程序。

Windows 10 向前迈出了大胆的一步。当您使用 Microsoft 帐户 (MSA) 或您的企业或(工作)帐户登录 Windows 10 时,假设 -

  • 您可以免费访问 OneDrive for MSA 帐户,并且可以使用企业帐户访问 Active Directory (AD) 和 Azure Active Directory (AAD)(这是云版本)。

  • 您可以访问不同的应用程序和资源。

  • 设备和应用程序处于漫游状态和设置。

Windows 10 设备

在 Windows 10 中漫游

当您登录到电脑时,您可以设置一些首选项,例如锁定屏幕或背景颜色,或者个性化不同类型的设置。如果您有多于一台运行 Windows 10 的计算机或设备,当您使用同一帐户登录其他设备时,您在一台设备上的首选项和设置将从云端同步。

在 Windows 10 中,当你设置或个性化应用程序设置时,这些设置将使用 UWP 中提供的漫游 API 进行漫游。当您在其他设备上再次运行相同的应用程序时,它将首先检索设置并将这些设置应用到该设备上的应用程序。

个性化设置

上传漫游数据到云端的限制为 100KB。如果超过此限制,同步将停止并且将像本地文件夹一样运行。

RoamingSettings API 以字典形式公开,应用程序可以在其中保存数据

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

当RoamingSettings中的数据发生更改时,它会触发DataChanged事件,您可以在其中刷新设置。

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

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

让我们看一个示例,其中我们将设置应用程序的背景颜色,这些设置将使用 UWP 中提供的漫游 API 进行漫游。

下面给出的是添加了不同控件的 XAML 代码。

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

下面给出了RoamingSettings和不同事件的 C# 实现。

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

编译并执行上述代码后,您将看到以下窗口。

内容体验执行

让我们选择灰色作为背景颜色并关闭该应用程序。

现在,当您在此设备或任何其他设备上运行此应用程序时,您将看到背景颜色已更改为灰色。这表明应用程序已成功检索到RoamingSettings中背景颜色变化的信息。

内容体验演示