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

译文
移动开发 新闻 Android
.NET/Windows Phone 7和Java/Android Api之间虽有很多不同点,但两者的相似点让你在移植应用程序时不需要费太大的力气。本文将告诉Android开发者如何进行Windows Phone开发。

【51CTO外电头条】和Android平台移动应用程序非常类似,Windows Phone 7(WP7)应用程序也是用托管语言编写的,Android使用Java,Windows Phone 7使用C#,各自都提供了丰富的开发库,Java和C#之间的许多差异都与样式有关,它们都和C/C++有着千丝万缕的联系,因此它俩也有很多相似之处。

.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,我们可以在一个控件中嵌入另一个控件,这意味着你不用创建复杂的控件,这一切都可以在你的应用程序中创建和自定义。

#p#

应用程序存储

对大多数移动应用程序而言,数据的存储是一件大事,对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存储下面这样的记录:

  1. //Create XML
  2. XDocument doc = new XDocument();
  3. doc.Add(new XElement("DataRoot",
  4. new XElement("Record",
  5. new XElement("value","data1")),
  6. new XElement("Record",
  7. new XElement("value","data2"))
  8. ));
 这段代码创建的XML结构如下:
  1. <DataRoot>
  2. <Record>
  3. <value>data1value>
  4. Record>
  5. <Record>
  6. <value>data2value>
  7. Record>
  8. DataRoot>

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

  1. //Save the XML
  2. using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
  3. {
  4. using (IsolatedStorageFileStream file = isf.OpenFile("data.xml", FileMode.OpenOrCreate))
  5. {
  6. doc.Save(file);
  7. file.Close();
  8. }
  9. }

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

  1. //Load the XML
  2. using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
  3. {
  4. using (IsolatedStorageFileStream file = isf.OpenFile("data.xml", FileMode.OpenOrCreate))
  5. {
  6. XDocument d = XDocument.Load(file);
  7. var query = from r in d.Root.Elements("Record")
  8. select r;
  9. //Process the list of record
  10. }
  11. }

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

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

原文名:Windows Phone 7 Development for Android Developers

作者:Chris Bennett

【51CTO译稿,非经授权谢绝转载,合作媒体转载请注明原文出处、作者及51CTO译稿和译者!】

【编辑推荐】

  1. 诺基亚微软联盟 智能手机市场三分天下?
  2. Windows Phone 7 免费线下培训火热报名中
  3. 诺基亚向开发者赠送E7及Windows Phone 7手机
  4. 钱景无限 Android应用开发者晒收入
  5. Android开发者:开发难度高 用户不愿付费
  6. iPhone vs Android 拥戴者的奇特世界观
  7. Windows Phone开发工具下载地址
  8. Windows Phone开发工具修正版下载地址

 

责任编辑:杨鹏飞 来源: 51CTO译文
相关推荐

2013-07-17 09:08:15

2014-03-07 11:16:12

2012-06-05 14:25:46

Windows Pho

2012-05-18 20:17:15

Windows Pho开发者

2014-04-14 11:23:27

WP8.1Build2014

2010-12-16 10:06:31

Windows Pho

2013-12-05 10:44:19

TechEd2013

2011-04-06 16:49:48

AndroidAndroid Mar

2012-06-29 10:51:44

Windows Pho

2013-11-07 17:08:39

微软Windows StoWindows Pho

2010-10-14 09:41:10

Windows Pho

2012-03-27 22:56:36

Windows Pho

2012-05-03 09:54:01

Windows Pho

2011-10-20 13:29:02

Windows Pho应用商店

2010-12-14 09:55:44

注册Windows P

2012-05-16 17:36:36

Windows Pho

2012-05-14 18:35:20

Windows Pho

2012-02-06 09:04:00

Windows Pho开发者体验总监

2013-08-13 14:22:33

开发者微软Windows Pho

2012-05-23 23:34:29

Windows Pho
点赞
收藏

51CTO技术栈公众号