-2

我已經在我的機器上安裝了芒果SDK,我想創建一個在Windows Phone OS 7.0和Windows Phone OS 7.5設備上運行的應用程序。另外我需要在同一個應用程序中實現許多芒果功能。可能嗎 ?如果是,請告訴我如何進行版本檢查,因爲基於我們需要實現芒果功能的版本。WP7.1向後兼容性

回答

6

你將不得不維護兩個不同的版本。您無法同時編譯一個支持兩個版本的XAP。

Mango API僅在使用7.1 SDK編譯時纔可用。因此,您不能在代碼中進行聯機檢查。

但是這是毫無意義的,因爲幾乎沒有用戶還沒有升級到芒果,並且所有新手機都帶有芒果。

+1

如果你讓爲自己的受衆特徵的應用程序,我完全同意這種說法;這裏唯一的問題是與客戶合作,說服他們放棄7.0的支持 - 我上次檢查時,微軟沒有發佈關於Mango vs 7.0的用戶百分比的任何信息。 – 2012-01-04 08:38:22

2

可以使用Type類和反思,雖然過程並不容易做到這一點。創建了Windows Phone 7.0的應用程序,然後創建一個實現了芒果特定功能MangoExtensions類:

http://www.sharpgis.net/post/2011/08/21/Windows-Phone-Adding-Mango-features-to-a-70-WinPhone-App.aspx

bool IsMangoDevice = (Environment.OSVersion.Version >= new Version(7, 1)); 

if (IsMangoDevice) 
{ 
    Type t = Type.GetType("Microsoft.Phone.Shell.StandardTileData, Microsoft.Phone"); 

    //get the constructor for the StandardTileData and create a new instance of it 
    var newTileData = t.GetConstructor(new Type[] { }).Invoke(null); 
    //Get the setter method for the title property 
    var setMethod = newTileData.GetType().GetProperty("Title").GetSetMethod(); 
    //Set the tile title 
    setMethod.Invoke(newTileData, new object[] { "This is my new tile" }); 
    //Get the create method for the shell tiles 
    Type shellTileType = Type.GetType("Microsoft.Phone.Shell.ShellTile, Microsoft.Phone"); 
    var createMethod = shellTileType.GetMethod("Create"); 
    //Create the tile, with the uri and tile data 
    Uri uri = new new Uri("/MainPage.xaml?Test=This_Came_From_A_Secondary_Tile", UriKind.Relative) 
    createMethod.Invoke(null, new object[] { uri, newTileData}); 
}