WP7.1向后兼容

时间:2012-01-04 06:53:17

标签: windows-phone-7.1 windows-phone-7 backwards-compatibility

我在我的机器上安装了mango SDK,我想创建一个在Windows Phone OS 7.0和Windows Phone OS 7.5设备上运行的应用程序。另外,我需要在同一个应用程序中实现许多芒果功能。可能吗 ?如果是,请告诉我如何进行版本检查,因为基于我们需要实现芒果功能的版本。

3 个答案:

答案 0 :(得分:6)

您必须维护两个不同的版本。您无法同时编译一个支持两个版本的XAP。

Mango API仅在使用7.1 SDK进行编译时可用。因此,您无法在代码中进行内联检查。

但这是毫无意义的,因为几乎没有用户没有升级到芒果,所有新手机都附带芒果。

答案 1 :(得分:2)

现在几天所有的Windows手机都附带了Wp7.5芒果版本,旧版设备也正在进行芒果更新,因此仅针对少数WP7.0运行手机看起来毫无意义。

但如果您不需要任何与SDK相关的api访问权限,那么您可以进行此分叉。

You can find the solution to the finding the OS version is in [my answer of same kind of question here.] 1

答案 2 :(得分: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});
}