×
Namespaces

Variants
Actions

Windows Phone开发常见问题

From Nokia Developer Wiki
Jump to: navigation, search
SignpostIcon WP7 70px.png
WP Metro Icon Baby.png
SignpostIcon Code 52.png
Article Metadata

兼容于
文章
WS_YiLunLuo 在 02 Dec 2011 创建
最后由 hamishwillee 在 18 Jul 2013 编辑

Contents

Windows Phone开发常见问题

从哪里开始学习Windows Phone开发

我们推荐你从Windows Phone的portal开始:http://create.msdn.com/en-US/ 。这边你可以找到很多资料。例如,想开始进行Silverlight开发,可以参考http://create.msdn.com/en-us/education/quickstarts 上的各个教程。想开始进行XNA开发,可以参考http://create.msdn.com/en-us/education/gamedevelopment 上的各个教程。

微软还提供了非常完整的免费课程,你可以自http://msdn.microsoft.com/en-us/gg266499 (WP7)以及http://msdn.microsoft.com/en-us/WP7MangoTrainingCourse (WP7.1)访问。

完成了以上课程,你可以参考官方文档:http://create.msdn.com/en-us/education/documentation 。这些文档写得很详尽,涉及到开发的方方面面。也包括了很多best practice。

微软也提供了众多的code sample,你可以参考学习:http://msdn.microsoft.com/en-us/library/ff431744(v=VS.92).aspx

若是你更喜欢传统的学习方式,也可以购买一些书籍。著名的Charles Petzold就写过一本:http://blogs.msdn.com/b/microsoft_press/archive/2010/10/28/free-ebook-programming-windows-phone-7-by-charles-petzold.aspx 。但是请注意书籍的更新往往要比网络资源慢很多。

此外你也可以找到一些中文版的资料,例如http://create.msdn.com/zh-CN/ 。但是通常英文版的更新比较快。


我要去哪里提feature request

如果有一个功能目前版本的Windows Phone不支持,可以去http://dotnet.uservoice.com/forums/4325-silverlight-feature-suggestions 提一个feature request,请点击vote按钮,如果有足够多的人要求该功能实现,在未来的某个Silverlight/Windows Phone版本中就很可能实现了。


Windows Phone有哪些主要通信方式

Windows Phone支持传统的电话,短信,以及Email通信,但是你的程序无法直接控制电话短信,只能够通过PhoneCallTaskSmsComposeTask,以及EmailComposeTask间接通信。你可以使用这些task自动填充短信以及邮件内容,但无法强制用户发送短信和邮件,只有用户确认了才能发送。

Windows Phone也支持部分PC上的通信方式。WP7支持HTTP,你可以使用WebClient或者HttpWebRequest访问REST service。WP7也支持SOAP 1.1,你可以访问支持SOAP 1.1的SOAP service,例如使用BasicHttpBinding的WCF service。请注意大多数手机,例如iPhone和Android,都不支持SOAP(虽然有第三方类库),所以我们推荐尽量使用REST。

通常要和服务器通信我们推荐使用REST service,而不是短信和邮件,因为REST service最通用,你可以在非手机设备上(例如今后会出现支持Windows 8的平板电脑)使用同样的service。你的service可以部署在任何服务器上,只需要该服务器能在internet上访问。例如,你可以将服务部署在Windows Azure云端。

WP7.1也提供了部分socket的支持,有关详细信息请参考http://msdn.microsoft.com/en-us/library/hh202870(v=VS.92).aspx 。Socket适合于对性能要求高的场合,因为TCP相比较HTTP会快一些。


Windows Phone访问REST service使用什么样的验证方式

Windows Phone支持basic authentication以及OAuth。

在简单的场合下,你可以使用basic authentication。请注意使用SSL加密通信。使用basic authentication的方式和普通的Silverlight程序是一样的,请参考http://blogs.msdn.com/b/ralph.squillace/archive/2011/01/20/technical-note-windows-phone-7-basic-authentication-over-https.aspx 。

若是你希望你的service能被第三方客户端访问,我们推荐使用OAuth。OAuth是一种标准,很多常见的服务,例如Windows Live Connect,Windows Azure ACS,Facebook,Google API,都支持OAuth。 不过OAuth的使用稍微复杂一些。好在微软的DPE帮大家写好了一个组件,方便大家使用OAuth。请参考http://msdn.microsoft.com/en-us/wazplatformtrainingcourse_acsandwindowsphone7_topic2 获取更详细的信息。


我能否启动一个后台进程

Windows Phone强调用户体验,强调电池使用效率,因此不支持后台进程。但是考虑到很多程序确实需要在后台做一些事,在WP7.1中提供了background agents的功能。使用background agents,你可以要求系统在你的程序不处于运行状态时执行某些任务,但是系统不保证任务的优先级,若是多个程序都申请要执行后台任务,有可能你的任务必须等到其它程序申请的某个任务完成后才能执行。

Background agents还有其它一些限制,请参考http://msdn.microsoft.com/en-us/library/hh202961(v=VS.92).aspx 获得详细信息。


怎样在一个page中将数据传达给另一个page

在一个Silverlight程序中,你可能需要多个页面。当你从page A转移到page B时,你也许会希望传递一些数据给page B。这是有三种方式:

第一,用query string,例如URL定为/SecondPage.xaml?id=1,然后在SecondPage中通过NavigationContext.QueryString[“id”]取得对应的值。如果有多个属性,也可以直接传递/SecondPage.xaml?Name=MyName&Amount=100。注意所有的query string必须是string,如果是int之类的数值必须作类型转换,不能使用复杂类型。

第二,用一个全局变量,一个常见的做法是在App中定义一个属性,例如MyVariable。然后你可以通过(Application.Current as App).MyVariable的方式访问那个属性,读写均可。

第三,在当前页面中定义一个属性,在SecondPage中重写OnNavigatedFrom,然后判断e.Content的类型是不是之前的那个页面,如果是,就做个类型转换,并访问对应的属性。例如假设从FirstPage转到SecondPage,可以在SecondPage的OnNavigatedFrom中写

if (e.Content is FirstPage)
{
var v = (e.Content as FirstPage).SomeProperty;
}

至于从page B返回参数给page A,和从page A传参数到page B是一样的,就是把A当成second page,把B当成first page即可。也可以使用query string,全局变量,或者在B中定义一个属性。


Windows Phone提供了哪些类型的push notification service

总共有5种 push notification,但是Single Tile和Multi Tile统称为Tile,Toast和Deep Toast统称为Toast。具体如下:

Raw: 指的是service push一个二进制数据(在.NET平台上就是byte array)至手机。你的手机应用程序得到数据后,可以在应用程序内部进行处理并显示,但是不会涉及到任何tile和toast。

Single Tile: 这是tile的一种,指的是单纯地操作应用程序的main tile。Service push一条消息至手机,这条消息可以包括一幅画,一句话,还有一个数。手机收到该消息后,如果用户有选择将对应的应用程序pin到主页上,就会更新应用程序的main tile。

Multi Tile:这也是tile的一种,和single tile不同,它用于更新应用程序的secondary tile。你的程序可以提供一个功能,在主页上pin上不止一个tile。每个tile对应程序的一个页面。多个teile也可以对应同样的页面,使用query string区别表示。现在,service push消息时,会多包含一个URI信息,也就是对应的页面及查询字符串。当手机接收到该消息时,会比对每个secondary tile的URI,如果对应的页面和查询字符串都匹配,就会更新该tile。

Toast:service push两句话至手机,分别代表主标题和副标题。手机收到消息后,会显示在屏幕上方,过一段时间自动消失。即使你的程序不在运行这两句话也会显示。如果用户触碰了那条消息,你的应用程序就会打开。

Deep Toast:其实也是toast,只是包含了一个URI和查询字符串。当用户触碰消息时,你的程序可以根据URI和查询字符串判断要打开哪个页面。

想要获得更多信息,请查看我们的详细教程:http://msdn.microsoft.com/en-us/WP7MangoTrainingCourse_PushNotificationsMangoLab 。更多文档可以自http://msdn.microsoft.com/en-us/library/ff402537(v=VS.92).aspx 找到。

我能否开发一个系统组件

目前Windows Phone不支持自行开发系统组件。只有微软和诸如诺基亚之类的OEM才有权限开发系统组件。但是你可以开发一个类库,并且被其它程序调用。这个类库可以包含普通的类,UserControl,以及自定义控件。其开发过程和普通的Silverlight类库是一样的。若是你不知道如何在Silverlight中开发自定义控件,请参考http://www.silverlightshow.net/items/Creating-a-Silverlight-Custom-Control-The-Basics.aspx 。也有人专门针对Windows Phone写过一篇博客:http://www.windowsphonegeek.com/articles/Creating-a-WP7-Custom-Control-in-7-Steps

This page was last modified on 18 July 2013, at 09:38.
142 page views in the last 30 days.