zoukankan      html  css  js  c++  java
  • 【Win 10应用开发】如何知道UAP在哪个平台上运行

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

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

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

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

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

                var context = ResourceContext.GetForCurrentView();
                string s = string.Empty;
                foreach (var item in context.QualifierValues)
                {
                    s += item.Key + " : " + item.Value;
                    s += "
    ";
                }
                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属性也可以获得平台名称。

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

  • 相关阅读:
    敏捷开发原则与实践(七)之接口隔离原则
    敏捷开发原则与实践(六)之依赖倒置原则
    敏捷开发原则与实践(五)之替换原则
    敏捷开发原则与实践(四)之开放-关闭原则
    敏捷开发原则与实践(三)之 单一职责原则
    敏捷开发原则与实践(二)
    ios 3DTouch基本使用教程
    ios 关于正则表达式
    ios 含有textfield的viewcontroller随键盘弹起而改变位置
    ios 图片库和相机选择图片界面修改为简体中文
  • 原文地址:https://www.cnblogs.com/tcjiaan/p/4511497.html
Copyright © 2011-2022 走看看