距离2010年10月11日微软正式发布Windows Phone 7(简称WP7)已经过去半年了,2011年2月初由传出微软和诺基亚结盟的利好消息,我通过微博、百度知道等网站看到wp7的关注度也在持续上升,但是在国内.net开发人员中对于Windows Phone 7开发技术却响应者很少,虽然有Terry_龙 、Alexis 、linzheng、金山崟霸等牛人撰写了不少wp7开发的文章,但是这些文章的评论却少得可怜,0评论的一堆,常见的就是一两条评论,“WP7有约”的十多条评论也是“人情评论”多一点,少见技术型评论。


    就像PC机取代小型机、Web取代桌面大潮一样,现在移动终端时代已经到来,移动开发必将成为新的增长点,做为.Net开发者的我们对Windows Phone 7的关注应该是非常高的,为什么会出现现在的情况呢?我和我身边的朋友已经在开发社区上认识的朋友交流这个问题,很多人目前对WP7关注不足的原因如下:
1)windows phone 7平台刚推出,还不知道发展前景怎么样,iphone、android发展都那么火了,还有wp7的市场吗?而且大陆还没有上市,没有中文支持,用的人太少,也没有这方面的工作需求,怕学了一门没发展的技术。
2)windows phone 7集成的都是Windows Live、FaceBook、Twitter等中国人不怎么用的应用,没有对我们QQ、腾讯微博、优酷的支持,来中国肯定水土不服。
3)Windows phone 7的学习资料非常少,没有这方面的书。
4)WP7的开放性性不足,比如没有提供输入法接口、不能编写真正的多任务、不能直接访问摄像头、不能直接访问短信、不能编写本地代码。
5)Windows phone 7 的开发环境搭建麻烦,没有开发调试的真机,Windows phone 7开发必须在Windows7下,由于种种原因我现在只能用windows xp。

    对于第一点,传智播客.Net培训班的学生就经常问我“老师,你说windows phone能火起来吗?”,我的回答是“如果我能准确预测windows phone能不能火起来,我就比巴菲特还厉害,我就不在这教你们,我早去投资微软了”。虽然我不能给“windows phone能火起来”作担保,但是我是非常相信微软的实力的。很多人看iphone、android那么火,就好像没有wp7的容身之地了,我不想说iphone、android的缺点,省得挨骂,我只能说“战斗还没开始”。遥想当年Netscape曾经最高占据了95%的浏览器市场,微软IE还不是短短几年就把Netscape踩死了?游戏开发领域的OpenGL当年也是非常风光,但是微软靠结盟的方式推广DirectX,现在DirectX的已经盖过了OpenGL;同是游戏领域的微软XBox不也从曾经独占鳌头的PSP中抢走了一大块市场;离我们最近的.Net平台也不是后发制人从Java中夺下了很大一块市场,现在国内.Net开发的职位和Java开发职位数量相差无几。微软后发制人这一招一贯玩儿的很好,所以我个人情感上相信在移动开发领域微软也会再现一场经典的战役。微软目前推广WP7的切入点找的也非常好,微软利用他XBOX的市场优势来推广WP7,由于WP7支持XBOX的XNA游戏开发技术,据说XBOX下的XNA游戏只要修改几行代码就可以移植到WP7下运行。XBOX平台下有大量优秀的游戏,这样在WP7下游戏的数量就会出现井喷(这点已经在真实的上演了),对于普通的手机用户来说,他不管你是什么系统,用的什么技术,手机除了打打电话、发发短信、照照片之外,大部分时间就是一台随身游戏机,所以微软是准备靠WP7的游戏优势抢占市场,期待微软这步棋走好。
   
   
    当然即使微软败了,那么难道我们学习的WP7开发的知识就浪费了吗?要知道对于一个平台上的开发来说,最难的不是具体某个技术,而是这个平台的理念。比如对于Web开发,最难的是如何处理客户端和服务器端的交互、如何做好页面优化、如何做好SEO、如何处理用户的访问压力等等,无论是asp.net开发还是J2EE开发还是PHP开发,开发一个大型的互联网应用面对的问题不都是一样的吗?一个做PHP开发的人转做asp.net会很难吗?肯定不会,因为在php中遇到的问题在asp.net中也能会遇到,php中解决一个难题和思路和asp.net中是一样的。同样对于手机开发来说,最难的不是一门语言,而是移动开发和桌面开发的不同要求、移动开发界面交互的特点、触摸屏的应用、LBS等新理念。因此如果我们熟悉了Windows Phone7开发,即使微软败了,我们仍然能够用易经掌握的移动开发的理念去很快熟悉其他移动操作系统的开发。
   
    “大陆还没有上市,没有中文支持”这样的问题也不用担心,因为这只是暂时性的问题,Windows Phone7中文版在2011年底就会推出。“windows phone 7集成的都是Windows Live、FaceBook、Twitter等中国人不怎么用的应用,来中国肯定水土不服。”这也只是一个临时性问题,微软根本还没有发布中文版,现在看到的都是给老美用的版本,当然只有FaceBook这些应用了,你用担心中文版里FaceBook不能用?微软本地化做的是非常优秀的,微软非常懂中国国情,这就是为什么谷歌离开中国而微软在中国则发展的很happy的原因。Windows Phone7中文版推出的时候大家在手机上肯定看到的是QQ、新浪微博等这些本地化应用的。


    “用的人太少,也没有这方面的工作需求”,我只能说,现在不趁着业余时间学习一下,等大家都看清的时候早就晚了,闲着也是闲着,学一下Windows Phone开发,2011年底Windows Phone中文版出来,众多厂商会需要大量Windows Phone开发的岗位的,到时候再临时抱佛脚准备就赶不上最好的时机了,最好技术储备,这种事情及早不及晚。
   
    “Windows phone 7的学习资料非常少”,看似书店里没有Windows phone 7开发的书,网上关于Windows phone 7开发的资料也比较少,其实研究过Windows phone 7的开发人员都知道,Windows phone 7开发大部分的内容都是Silverlight、XNA这些东西,真正WP7特有的技术并不多。如果不进行游戏开发,那么WP7开发只涉及到Silverlight和少量的WP7特有API了,而且Windows phone 7下的Silverlight和普通的Silverlight差别非常小,现在Silverlight资料非常多,所以这些Silverlight学习资料都相当于WP7的学习资料了。所以想学Windows phone 7又懒得装WP7开发环境的可以直接去学Silverlight就行。WP7特有API非常少,一两天时间就可以基本掌握。
   
    WP7的开放性性不足确实是大问题。我看着Windows Phone SDK的就来气,开发的API太少了:没有开放输入法开发接口,所以我们只能坐等微软推出官方的中文输入法!无法直接访问摄像头,只能通过CameraCaptureTask让用户手动拍摄,我要做一个条码扫描的程序就做不了呀!无法直接发送短信,只能调用SmsComposeTask调用起来短信发送程序让用户点击发送,我怎么做短信群发程序呀!无法响应来电通知,我怎么做“响一声就挂”等来电防火墙呀!无法访问非独立存储之外的空间,我怎么做一个文件浏览器,我怎么做一个手机安全扫描软件呀!无法访问联系人列表,我怎么写一个联系人导入导出程序呀!无法编写多任务程序我怎么做定时任务提醒程序呀,连G-Alarm的WP7版本也只能尴尬的运行在前台,一旦被别的程序带进墓碑就只能干等着睡过头上班迟到了!有木有!Native Code的编写权限只有OEM伙伴才有,普通开发人员无法编写本地代码,我怎么做自己的系统应用呀!

     以目前微软开放的API来看,我们非OEM开发人员只能开发游戏、大众点评网客户端这类的应用,像手机360安全卫士、来电通、闹钟等这类应用无法实现。我相信这些都是暂时的,微软在逐步完善,而不是一开始就推出一个完善的版本,这也是适合互联网时代的发展速度,随着Windows Phone的升级,Windows Phone的API会越来越丰富的,比如多任务功能在下个版本中就将提供,希望微软尽快开放这些接口,能让我们开发出更丰富的应用。Windows Phone是基于Windows CE内核的,因此也请Windows CE高手研究一下Windows Phone,能让我们有更多undocumented的资料。当然对于想找一份Windows Phone开发的工作的人来说不用担心这些,未来Windows Phone程序开发的工作大部分都是开发大众点评网客户端、优酷网客户端、手机版腾讯微博等类型的应用,开发这些应用使用WP7目前的API足够了,可见微软开放API也是考虑了目前手机应用开发的主流的。
   
  最后一点“Windows phone 7开发必须在Windows7下”确实是大问题,微软为了卖Windows7做出了这样的决定,微软可以这么玩儿,可以咱们伤不起呀!我认识的很多朋友都由于这样那样的原因暂时只能工作在Windows XP下,他们本来是对Windows Phone开发感兴趣的,后来听说Windows phone 7开发必须在Windows7下就放弃了,看到网站上Windows phone 7的开发文章也只能看一看,没法把代码拿过来run一把。而且在Windows7上搭建起了WP7开发环境也不爽,因为微软的WP7的仿真器有很多缺点,比如很多设备无法用,比如FM收音机永远是off,加速度感应器永远是平躺静止状态,振动控制器看不到效果,GPS无法使用,摄像头模拟器永远都是一个随机动的黑色方块,麦克风无法用……;而且WP7的仿真器和主机交互麻烦,比如想把一首mp3放到仿真器中播放很难,想把仿真器中生成的一个文件拷出来也很难;WP7的仿真器对硬件要求高,配置差一点的电脑运行起来非常卡,卡的无法忍受。
  
  我想WP7开发环境的这些缺点是很多人无法关注WP7的一个重要原因,为了解决这个问题,我用了一个月的时间折腾出一个“传智播客Windows Phone7的模拟器”。这款模拟器有如下的优点(好像广告耶):
  1)可以运行在windows xp下
  2)实现了WP7绝大部分API。包括启动器、选择器、外设(收音机、GPS、振动器、麦克风、摄像头、加速度感应器)、WP7特殊控件(枢轴视图、全景视图、DatePicker、TimePicker、ListPicker、ApplicationBar)、XNA部分功能(Audio、触摸屏、MediaLibrary、InputScope键盘处理)、墓碑机制(TombStone)等。
  3)不需要DirectX10支持,在低端显卡上也能运行
  4)资源占用小,不像WP7仿真器那样对计算机性能要求高,因此普通笔记本就能运行
  5)开发调试方便,能够把本机磁盘映射为手机的媒体库。
  
  
  注意这里我用的词是模拟器,而不是仿真器。模拟器和仿真器的区别是:Emulator中文叫仿真器,是精确地在一种环境下仿真另一种环境下的运行方式,其目的是完全仿真。Simulator中文叫模拟器,是通过某种手段来模拟某些东西,不一定要完全正确的原理,追求的只是尽可能的相像。但是如果应用能够在这个模拟器下运行,几乎不用做任何的修改就可以在仿真器、真机中运行。
  
  以下是一些截图:
  


  
  

DatePicker控件

InputScope软键盘

加速度感应器和手机方向感应

 

由于我这段时间只是在做API的整合,所以没有做太多美化,界面还很难看,我将继续整理,争取早日把这个版本发布出来供大家分享,希望能帮助Windows Phone开发的推广尽自己的微薄之力。我的腾讯微博:http://t.qq.com/yzk369 。再加一句广告:传智播客.Net培训飞速发展,急需牛X讲师的加入,年薪10——20W。