【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 += "\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屬性也可以獲得平台名稱。

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM