天天看點

【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屬性表示該資源的限定符集合。

悟性高的朋友可能已經猜到其中的玄機了,不過猜不到也不用急,現在我們用上面的代碼做兩件事,做完這兩件事你就會明白了。

第一件事,在本地計算機和平闆模拟器上運作應用,然後得到如下圖的結果:

【Win 10應用開發】如何知道UAP在哪個平台上運作

第二件事,在手機模拟器上運作一下,得到結果如下:

【Win 10應用開發】如何知道UAP在哪個平台上運作

不知道你看懂了沒,如果還沒有看出其中的奧妙,那老周就揭曉了:在資源限定符字典中,有一條記錄的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,首先,在本地計算機上運作一下,結果如下:

【Win 10應用開發】如何知道UAP在哪個平台上運作

接着,在手機模拟器上運作,結果如下:

【Win 10應用開發】如何知道UAP在哪個平台上運作

看來這個DeviceFamily确實很Family。

補充:後來發現,通路Windows.System.Profile.AnalyticsVersionInfo.DeviceFamily屬性也可以獲得平台名稱。

本文例子下載下傳位址:https://files.cnblogs.com/files/tcjiaan/deviceFamilySmp.zip

繼續閱讀