背水一战 Windows 10 (82) - 用户和账号: 获取用户的信息, 获取用户的同意
作者:webabcd
介绍
背水一战 Windows 10 之 用户和账号
- 获取用户的信息
- 获取用户的同意
示例
1、演示如何获取用户的信息
UserAndAccount/UserInfo.xaml
<Page x:Class="Windows10.UserAndAccount.UserInfo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Windows10.UserAndAccount" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Image x:Name="imageProfile" Margin="5" Width="64" Height="64" HorizontalAlignment="Left" /> </StackPanel> </Grid> </Page>
UserAndAccount/UserInfo.xaml.cs
/* * 演示如何获取用户的信息 * * 需要在 Package.appxmanifest 中的“功能”中勾选“用户账户信息”,即 <Capability Name="userAccountInformation" /> * 如上配置之后,即可通过 api 获取用户的相关信息(系统会自动弹出权限请求对话框) * * User - 用户 * FindAllAsync() - 查找全部用户,也可以根据 UserType 和 UserAuthenticationStatus 来查找用户 * 经过测试,其只能返回当前登录用户 * GetPropertyAsync(), GetPropertiesAsync() - 获取用户的指定属性 * 可获取的属性请参见 Windows.System.KnownUserProperties * GetPictureAsync() - 获取用户图片 * 图片规格有 64x64, 208x208, 424x424, 1080x1080 * NonRoamableId - 用户 id * 此 id 不可漫游 * UserType - 用户类型 * LocalUser, RemoteUser, LocalGuest, RemoteGuest * UserAuthenticationStatus - 用户的身份验证状态 * Unauthenticated, LocallyAuthenticated, RemotelyAuthenticated * CreateWatcher() - 返回 UserWatcher 对象,用于监听用户的状态变化 * 本例不做演示 */ using System; using System.Collections.Generic; using Windows.Foundation.Collections; using Windows.Storage.Streams; using Windows.System; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Navigation; namespace Windows10.UserAndAccount { public sealed partial class UserInfo : Page { public UserInfo() { this.InitializeComponent(); } protected async override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); // 我这里测试的结果是:返回的集合中只有一个元素,就是当前的登录用户 IReadOnlyList<User> users = await User.FindAllAsync(); // 系统会自动弹出权限请求对话框 User user = users?[0]; if (user != null) { // 对于获取用户的 NonRoamableId, Type, AuthenticationStatus 信息,不同意权限请求也是可以的 string result = "NonRoamableId: " + user.NonRoamableId + "\n"; result += "Type: " + user.Type.ToString() + "\n"; result += "AuthenticationStatus: " + user.AuthenticationStatus.ToString() + "\n"; // 对于获取用户的如下信息及图片,则必须要同意权限请求 string[] desiredProperties = new string[] { KnownUserProperties.DisplayName, KnownUserProperties.FirstName, KnownUserProperties.LastName, KnownUserProperties.ProviderName, KnownUserProperties.AccountName, KnownUserProperties.GuestHost, KnownUserProperties.PrincipalName, KnownUserProperties.DomainName, KnownUserProperties.SessionInitiationProtocolUri, }; // 获取用户的指定属性集合 IPropertySet values = await user.GetPropertiesAsync(desiredProperties); foreach (string property in desiredProperties) { result += property + ": " + values[property] + "\n"; } // 获取用户的指定属性 // object displayName = await user.GetPropertyAsync(KnownUserProperties.DisplayName); lblMsg.Text = result; // 获取用户的图片 IRandomAccessStreamReference streamReference = await user.GetPictureAsync(UserPictureSize.Size64x64); if (streamReference != null) { IRandomAccessStream stream = await streamReference.OpenReadAsync(); BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(stream); imageProfile.Source = bitmapImage; } } } } }
2、演示如何获取用户的同意
UserAndAccount/UserVerifier.xaml
<Page x:Class="Windows10.UserAndAccount.UserVerifier" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Windows10.UserAndAccount" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="buttonRequestConsent" Content="获取用户的同意" Click="buttonRequestConsent_Click" Margin="5" /> </StackPanel> </Grid> </Page>
UserAndAccount/UserVerifier.xaml.cs
/* * 演示如何获取用户的同意 * * UserConsentVerifier - 验证器(比如 pin 验证等) * CheckAvailabilityAsync() - 验证器的可用性 * RequestVerificationAsync(string message) - 请求用户的同意(可以指定用于提示用户的信息) */ using System; using Windows.Security.Credentials.UI; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; namespace Windows10.UserAndAccount { public sealed partial class UserVerifier : Page { public UserVerifier() { this.InitializeComponent(); } protected async override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); try { UserConsentVerifierAvailability verifierAvailability = await UserConsentVerifier.CheckAvailabilityAsync(); switch (verifierAvailability) { case UserConsentVerifierAvailability.Available: // 验证器可用 lblMsg.Text = "UserConsentVerifierAvailability.Available"; break; case UserConsentVerifierAvailability.DeviceBusy: lblMsg.Text = "UserConsentVerifierAvailability.DeviceBusy"; break; case UserConsentVerifierAvailability.DeviceNotPresent: lblMsg.Text = "UserConsentVerifierAvailability.DeviceNotPresent"; break; case UserConsentVerifierAvailability.DisabledByPolicy: lblMsg.Text = "UserConsentVerifierAvailability.DisabledByPolicy"; break; case UserConsentVerifierAvailability.NotConfiguredForUser: lblMsg.Text = "UserConsentVerifierAvailability.NotConfiguredForUser"; break; default: break; } } catch (Exception ex) { lblMsg.Text = ex.ToString(); } lblMsg.Text += "\n"; } private async void buttonRequestConsent_Click(object sender, RoutedEventArgs e) { try { UserConsentVerificationResult consentResult = await UserConsentVerifier.RequestVerificationAsync("我要做一些操作,您同意吗?"); switch (consentResult) { case UserConsentVerificationResult.Verified: // 验证通过 lblMsg.Text += "UserConsentVerificationResult.Verified"; break; case UserConsentVerificationResult.DeviceBusy: lblMsg.Text += "UserConsentVerificationResult.DeviceBusy"; break; case UserConsentVerificationResult.DeviceNotPresent: lblMsg.Text += "UserConsentVerificationResult.DeviceNotPresent"; break; case UserConsentVerificationResult.DisabledByPolicy: lblMsg.Text += "UserConsentVerificationResult.DisabledByPolicy"; break; case UserConsentVerificationResult.NotConfiguredForUser: lblMsg.Text += "UserConsentVerificationResult.NotConfiguredForUser"; break; case UserConsentVerificationResult.RetriesExhausted: lblMsg.Text += "UserConsentVerificationResult.RetriesExhausted"; break; case UserConsentVerificationResult.Canceled: // 验证取消 lblMsg.Text += "UserConsentVerificationResult.Canceled"; break; default: break; } } catch (Exception ex) { lblMsg.Text += ex.ToString(); } lblMsg.Text += "\n"; } } }
OK
[源码下载]