×
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.
108 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×