写给Android开发者的Windows Phone开发秘籍

.NET/Windows Phone 7和Java/Android Api之间虽有很多不同点,但两者的相似点让你在移植应用程序时不需要费太大的力气。

平台差异

在深入了解转换或创建Windows Phone 7应用程序相关的工具和过程之前,我们先简单介绍一下Windows Phone 7和Android各自使用的术语和技术。Windows Phone 7第一个重大的不同点是,应用程序是用C#编写的托管.NET程序集,平台支持两种类型的应用程序:Silverlight和XNA游戏。

大多数Windows Phone 7应用程序都是用Silverlight创建的,通过常见的控件,如标签、文本框和列表等,提供典型的基于表单的用户交互,Android Layout和Activity与Silverlight中的Page类似。

Windows Phone 7还支持XNA,它允许用户创建2D和3D游戏,它们分别等同于Android SurfaceView和GLSurfaceView的2D和3D模式,但和Android不同的是,XNA游戏使用的是Direct3D,因此更容易将PC和Xbox 360游戏移植到手机上,而Android使用的是OpenGL。

页面(Page)和导航(Navigation)

Silverlight Page实际上是一个XML文件,它和Android Layout类似,XML定义一个Page时是使用XAML(可扩展应用程序标记语言)创建的,XAML和Android Layout类似,但它支持更多的功能,XAML允许开发人员在Page内执行操作,包括Animations和Data Binding等,从此不再需要为这些功能编写代码。

Android Layout和Activity是松耦合的,你需要自己编写代码,以便和Activity内的UI元素连接起来,对给定的Page来说,C#代码是和它捆绑到一起的,因此不需要编写UI附属元素,平台会自动为对象创建相关的“线路”,为Page和UI创建相关的事件,这样可以预防在Task onCreate方法中经常出现的混乱。

这两个平台另一个重要的不同之处是导航,在Android中,你可以通过创建一个Intent从一个任务切换到另一个任务,它和Windows Phone 7中的Navigation功能相同,Navigation允许你在Page之间移动,和Android Intent类似,你可以向你要导航的Page传递数据,Windows Phone 7中的Page和ASP.NET中的Page有某些属性是相似的。

将Layout转换成Page

在深入了解代码之前,我们先来看看Android Layout XML如何向Windows Phone 7 XAML Page转换,在Windows Phone 7免费工具箱中,最耀眼的莫过于XAML设计工具,Visual Studio® 2010中的XAML设计器只适合初级开发人员,它只能对Page做一些基本的控制,Expression Blend®则是专业化的工具,需要改造UI时,你应该使用它,和Android Layout一样,你也可以使用文本编辑器直接编辑XAML文件,因为实际上它是一个XML文件。

Windows Phone 7 Page提供了Android Layout类似的布局能力,下表列出了它支持的布局属性和Android对应的属性。

布局控件

Windows Phone 7

Android

Canvas

AbsoluteLayout

Grid

GridView

ScrollView

ScrollView

StackPanel

LinearLayout

正如你所看到的,Windows Phone 7提供了和Android几乎相同的布局能力,下表列出了Windows Phone 7的基本控件和Android的同等控件。

基本控件

Windows Phone 7

Android

TextBlock

TextView

TextBox

EditText

Button

Button

CheckBox

CheckBox

RadioButton

RadioButton

Image

ImageView

ProgressBar

ProgressBar

ListBox

ListView

Map

MapView

WebBrowser

WebView

你应该注意到Windows Phone 7的基本控件和Layout类型能够一一对应,但也有些特殊的Layout和控件无法对应起来,其原因在于XAML的强大,通过XAML,我们可以在一个控件中嵌入另一个控件,这意味着你不用创建复杂的控件,这一切都可以在你的应用程序中创建和自定义。

应用程序存储

对大多数移动应用程序而言,数据的存储是一件大事,对Windows Phone 7来说,最佳的办法是选择云服务作为数据存储的主要手段,你可能会感到很奇怪,但如果你是为你的网站开发一个前端程序,你就会明白了。如果你不是做的这种开发,你有两种数据存储方法:使用商业云存储服务,如Windows Azure云存储,或使用本地IsolatedStorage接口,IsolatedStorage允许你为应用程序存储文件。

Windows Phone 7应用程序允许你访问本地数据,但它目前并没有提供内置的数据库API,如SQLServer精简版或SQLite,如果你现在的Android应用程序使用的是SQLite存储数据,你需要提出一个替代方案,在写这篇文章的时候,在Codeplex上有几个开源项目为IsolatedStorage接口增加了数据库存储功能。

根据你应用程序的数据存储需要,不需要数据库API,也许就能将数据存储在本地,例如,如果你在构建一个RSS/ Podcast应用程序,你可以把RSS种子就保存在XML文件中,当你需要访问数据时,你只需要载入数据,使用LINQ获取特定的数据即可。

在RSS应用程序示例中,我们可以使用RSS种子的原始XML文件,也可以使用LINQ to XML创建XDocument存储下面这样的记录:

//Create XML  



XDocument doc = new XDocument();  



   doc.Add(new XElement("DataRoot",  


      new XElement("Record",  


         new XElement("value","data1")),  


      new XElement("Record",  


         new XElement("value","data2"))  


      ));
<DataRoot> 



   <Record> 




      <value>data1value> 




   Record> 




   <Record> 




      <value>data2value> 




   Record> 



DataRoot>

为了将这个XML隔离存储,我们使用IsolatedStorageFile和IsolatedStorageFileStream,如:

//Save the XML  



using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())  



{  



   using (IsolatedStorageFileStream file = isf.OpenFile("data.xml", FileMode.OpenOrCreate))  



   {  


      doc.Save(file);  


 


      file.Close();  


   }  


}

正如你所看到的,隔离存储XML数据是如此的简单,读取XML和使用LINQ to XML查询结果的的代码如下:

//Load the XML  



using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())  



{  



   using (IsolatedStorageFileStream file = isf.OpenFile("data.xml", FileMode.OpenOrCreate))  



   {  



      XDocument d = XDocument.Load(file);  



 



      var query = from r in d.Root.Elements("Record")  



                        select r;  


 


 


      //Process the list of record  


 


   }  


}

虽然上面的例子非常简单,它也说明了即使没有数据库,在手机上存储数据是多么容易,这些代码还可以进一步扩展,存储更复杂的数据。

Windows Phone 7支持存储应用程序设置和用户偏好设置,在Android中,它叫做Shared Preferences,支持存储Key/Value类型的信息,在Windows Phone 7中,它叫做Local Settings,通过IsolatedStorage接口可以访问它们,同样,信息访问也是通过Key/Value的格式进行的。

开发工具

作为一名Android开发人员,你可能对开源开发工具情有独钟,使用Eclipse作为Android应用程序开发IDE无疑是大多数人的选择,但Android Development Toolkit(ADT)缺乏许多必要的工具,如适合的布局工具,虽然ADT带有布局工具,但不够强大,很多时候,我们不得不手写XML。

相比之下,微软平台可供选择的工具就要多得多,现在在create.msdn.com上提供的工具有:

◆Microsoft Visual Studio 2010 Express for Phone

◆Microsoft Expression Blend for Phone

◆Microsoft XNA Game Studio for Phone

这三个工具允许你免费使用,Microsoft Visual Studio 2010 Express for Phone是主要的Windows Phone 7应用程序集成开发环境,它包括了所有必需的工具,如Page布局工具,C#编译器,Windows Phone 7模拟器等。

Microsoft Expression Blend for Phone主要是针对专业设计人员的,设计人员可以使用它从零开始创建Page。

Microsoft XNA Game Studio for Phone则是为2D和3D游戏开发准备的,它包括了XNA框架,以及处理游戏音效和图像需要的工具。

小结

Windows Phone 7给智能手机操作系统市场注入了新的活力,它基于成熟的技术,如Silverlight,WPF,C#等,正如本文介绍的,Android和Windows Phone 7之间的差异主要集中在表面上,Android开发人员要转向Windows Phone 7开发并不是什么难事。

51CTO题外话

前段日子诺基亚与微软结盟,未来诺基亚的主推智能手机平台将为Windows Phone平台,对诺基亚和微软来讲都将是一个双赢的局面,而对Windows Phone平台的开发者来讲有诺基亚这样的手机厂商支持,开发Windows Phone应用将更加“钱途”。到目前为止,Android平台比Windows Phone平台的开发者要多得多,希望本文能够给Android开发者一个启迪。

原文出处:http://www.devx.com/VS_2010/Article/45898

相关推荐