【Win 10应用开发】如何知道UAP在哪个平台上运行

作者: 虞磨

更新时间:2022-03-26 13:10:45

1524 阅读

面向22世纪的现代化应用程序可以同时在多种设备上运行,于是有朋友会有一个疑问:有时候,我们还真的需要判断一下,UAP应用程序在哪个平台上运行。尽管大多情况下我们不必要这样做,但某些特殊情况还得考虑。比如一串数据列表,我希望如果在桌面上运行时就以横向列表展现;但要是运行在手机上就以纵向列表展现。

也就是说,其实我们只需分析两种情况即可:

一、桌面。(台式机、笔记本、平板、游戏机、发广告专用机、导航器……)

二、移动环境。其实就是手机。

 

那么,有啥办法可判断呢?勿急,老周先告诉你,方法比较简单。咱们先看一段代码:

            var context = ResourceContext.GetForCurrentView();
            string s = string.Empty;
            foreach (var item in context.QualifierValues)
            {
                s += item.Key + " : " + item.Value;
                s += "\n";
            }
            tb.Text = s;

ResourceContext类在Windows.ApplicationModel.Resources.Core命名空间下,就是用于访问与当前应用程序的限定资源的API,也可以把这个“资源”理解为应用程序的一些配置信息,如什么语言的,日语的还中文的;什么主题基调的,浅色还是深色;什么比例的,缩放100%还是180%……

调用ResourceContext.GetForCurrentView()方法可以直接得到ResourceContext实例,再通过QualifierValues属性得到一个字典数据:Key为字符串,Value也是字符串。QualifierValues属性表示该资源的限定符集合。

悟性高的朋友可能已经猜到其中的玄机了,不过猜不到也不用急,现在我们用上面的代码做两件事,做完这两件事你就会明白了。

第一件事,在本地计算机和平板模拟器上运行应用,然后得到如下图的结果:

 

第二件事,在手机模拟器上运行一下,得到结果如下:

 

不知道你看懂了没,如果还没有看出其中的奥妙,那老周就揭晓了:在资源限定符字典中,有一条记录的Key为DeviceFamily,如果在桌面上运行的话,它的Value就是Desktop;如果在手机上运行,Value就是Mobile

怎么样,现在懂了吧?

那么,你猜猜,如果判断UAP正在运行的设备,该想到方法了吧。

 

老周给出个例子,界面上有个StackPanel容器,里面放了几块正方形的烧饼。如果在桌面上运行,烧饼就横着放;如果在手机上运行,烧饼就竖着放,以方便用户流口水。

XAML代码如下:

        <StackPanel Margin="15" Name="panel">
            <Rectangle Margin="14" Width="125" Height="125" Fill="Yellow"/>
            <Rectangle Margin="14" Width="125" Height="125" Fill="Red"/>
            <Rectangle Margin="14" Width="125" Height="125" Fill="Pink"/>
            <Rectangle Margin="14" Width="125" Height="125" Fill="Orange"/>
        </StackPanel>

 

处理代码如下:

            // 得到资源上下文对象
            ResourceContext resContext = ResourceContext.GetForCurrentView();
            // 访问键名为DeviceFamily的值
            string value = resContext.QualifierValues["DeviceFamily"];
            // 分析
            if (value == "Desktop")
            {
                panel.Orientation = Orientation.Horizontal;
            }
            else
            {
                panel.Orientation = Orientation.Vertical;
            }


OK,首先,在本地计算机上运行一下,结果如下:

 

接着,在手机模拟器上运行,结果如下:

 

看来这个DeviceFamily确实很Family。

 

补充:后来发现,访问Windows.System.Profile.AnalyticsVersionInfo.DeviceFamily属性也可以获得平台名称。

 

本文例子下载地址:https://files.cnblogs.com/files/tcjiaan/deviceFamilySmp.zip

 

版权声明:本文著作权归作者【虞磨 】所有,不代表本网站立场。

侵权请联系:root_email@163.com