背水一战 Windows 10 (82) - 用户和账号: 获取用户的信息, 获取用户的同意

原文:背水一战 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
[源码下载]

原文地址:https://www.cnblogs.com/lonelyxmas/p/8527058.html

时间: 2024-10-19 17:33:49

背水一战 Windows 10 (82) - 用户和账号: 获取用户的信息, 获取用户的同意的相关文章

背水一战 Windows 10 (86) - 文件系统: 获取文件夹的属性, 获取文件夹的缩略图

原文:背水一战 Windows 10 (86) - 文件系统: 获取文件夹的属性, 获取文件夹的缩略图 [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获取文件夹的属性 获取文件夹的缩略图 示例1.演示如何获取文件夹的属性FileSystem/FolderProperties.xaml <Page x:Class="Windows10.FileSystem.FolderProperties" xmlns="http://schema

背水一战 Windows 10 (87) - 文件系统: 获取文件的属性, 修改文件的属性, 获取文件的缩略图

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获取文件的属性 修改文件的属性 获取文件的缩略图 示例1.演示如何获取文件的属性,修改文件的属性FileSystem/FileProperties.xaml <Page x:Class="Windows10.FileSystem.FileProperties" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio

背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理

[源码下载] 背水一战 Windows 10 (90) - 文件系统: 获取 Package 中的文件, 可移动存储中的文件操作, “库”管理 作者:webabcd 介绍背水一战 Windows 10 之 文件系统 获取 Package 中的文件 可移动存储中的文件操作 “库”管理 示例1.演示如何获取 Package 中的文件FileSystem/PackageData/Demo.xaml <Page x:Class="Windows10.FileSystem.PackageData.D

背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 其它 通过 Windows.System.Profile 命名空间下的类获取信息 查找指定类或接口的所在程序集的所有子类和子接口 示例1.演示如何通过 Windows.System.Profile 命名空间下的类获取信息Information/ProfileInfo.xaml <Page x:Class="Windows10.Information.ProfileInfo" xmlns="htt

背水一战 Windows 10 (28) - 控件(文本类): TextBox, PasswordBox

原文:背水一战 Windows 10 (28) - 控件(文本类): TextBox, PasswordBox [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) TextBox PasswordBox 示例1.TextBox 的示例 1Controls/TextControl/TextBoxDemo1.xaml <Page x:Class="Windows10.Controls.TextControl.TextBoxDemo1" xmln

背水一战 Windows 10 (27) - 控件(文本类): TextBlock

原文:背水一战 Windows 10 (27) - 控件(文本类): TextBlock [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) TextBlock 示例1.TextBlock 的示例 1Controls/TextControl/TextBlockDemo1.xaml <Page x:Class="Windows10.Controls.TextControl.TextBlockDemo1" xmlns="http://

背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox

原文:背水一战 Windows 10 (29) - 控件(文本类): RichTextBlock, RichTextBlockOverflow, RichEditBox [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(文本类) RichTextBlock RichTextBlockOverflow RichEditBox 示例1.RichTextBlock 的示例Controls/TextControl/RichTextBlockDemo.xaml <Page

背水一战 Windows 10 (55) - 控件(集合类): ItemsControl - SemanticZoom, ISemanticZoomInformation

[源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(集合类 - ItemsControl) SemanticZoom ISemanticZoomInformation 示例1.SemanticZoom 的示例Controls/CollectionControl/SemanticZoomDemo/SemanticZoomDemo.xaml <Page x:Class="Windows10.Controls.CollectionControl.SemanticZo

背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation

原文:背水一战 Windows 10 (55) - 控件(集合类): SemanticZoom, ISemanticZoomInformation [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(集合类) SemanticZoom ISemanticZoomInformation 示例1.SemanticZoom 的示例Controls/CollectionControl/SemanticZoomDemo/SemanticZoomDemo.xaml <Page