Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Windows Phone中常见的不支持的功能即部分可行的解决方案

From Wiki
Jump to: navigation, search
SignpostIcon WP7 70px.png
Article Metadata

兼容于
文章
WS_YiLunLuo 在 29 Mar 2012 创建
最后由 hamishwillee 在 22 Jul 2013 编辑

Contents

简介

最近我们收到的邮件中大多数问题都是为什么Windows Phone不支持某种功能,以及有没有什么可以代替的解决方案。为此我们觉得有必要作一个总结。

本文的概要:

  • Windows Phone的定位
  • 常见的不支持的功能及可能的替换解决方案
  • 怎样题feature request

Windows Phone的定位

事实上有很大一部分的疑问都是因为对Windows Phone定位不了解所造成的。因此我们首先需要认清Windows Phone的定位,从而设立一个正确的期望值,不要想当然地认为任何在电脑上可以拥有的功能都能在Windows Phone上使用。

什么是手机和智能手机

首先我们要认清Windows Phone是一种智能手机。什么叫智能手机?以下是wikipedia 上的定义:

A smartphone is a mobile phone built on a mobile computing platform, with more advanced computing ability and connectivity than a feature phone.

虽然说这个定义可能还不是很清晰,但是请注意两点:第一,智能手机依然是手机,请不要误以为它是电脑,服务器,或者游戏机。第二,智能手机相对于一般手机拥有较强的计算机功能,但是不是相对于电脑拥有较强的计算功能。

为了更好地认清智能手机,先让我们看看一般的手机。所谓的一般手机,指的是一个可以随身携带的通信娱乐工具。你可以使用一部一般的手机做以下事情:

  • 打电话
  • 发短信
  • 拍低分辨率的照片
  • 听简单的音乐


关于最后一点,大多数的非智能手机都允许你播放midi音乐,也就是数字音乐。通常midi音乐都很小,因为它们记录的是乐谱,而不是声波。midi因为很适合铃声,但是它们不能记录人的声音。 智能手机在一般手机的基础上提供了更多的功能。常见的功能有:

  • 安装应用程序,但是能够安装和运行的应用程序和电脑有很大的不同,视不同平台的手机而定
  • 上网,可以使用移动网络(例如3G),或者wifi。其中移动网络需要支付额外的资金,而wifi则不需要
  • 拍低分辨率的电影
  • 播放部分类型的音乐和歌曲
  • 播放部分类型的电影
  • 玩休闲游戏
  • 获取一些简单的信息,例如天气预报,股票走势,等等
  • 进行简单的创作,例如文本编辑,录音,等等


确实,我们看到,包括Windows Phone在内的各种智能手机,比起一般的手机拥有多得多的功能。但是,也请注意我们在很多功能前面都加了一个“部分”或者“简单的”这种修饰词,这是因为,是真的,智能手机目前还远远无法取代电脑。

常见的Windows Phone的硬件规格

接下来,我们看看Windows Phone的硬件规格。所有信息可以在另外一篇wiki中找到,这里不再重复。不过我们要强调一点:Windows Phone的硬件规格和同类智能手机,例如iPhone 4S,主流的Android手机的平均值,差不了太多,但是和台式机,笔记本,甚至是平板电脑,都有较大的差距。

在查看硬件规格的时候,大家首先应该注意的是屏幕尺寸,因为这常常是用户体验最重要的一点。我用过一些手机上的PDF阅读软件,通常都感觉不怎么样,原因是屏幕太小,而PDF又不支持自动换行,所以只能要么将字体弄得很小,要么常常进行左右滑动,效果很不理想。但是同样的文档放到PC上,即使使用同一品牌的软件,也能达到十分理想的阅读效果。因此大家在开发程序的过程中一定要注意屏幕大小。

除此之外也要注意一下CPU性能,如果一个程序需要很多计算资源,很可能就不适用于手机了。

鸟瞰

到了这里,大家应该大致上能够明白Windows Phone的定位了。我们说Windows Phone是一种智能手机,而智能手机是众多客户端设备的一种,客户端设备和服务器以及云共同组成了现代的信息社会。

Modern Information World.png

可以看到,Windows Phone在现代信息社会中只是一小块,它和其它各种设备以及云是相辅相成的,所以在抱怨某种功能不支持之前,请仔细考虑,你的应用是否适合智能手机,还是说针对其它设备开发,或者将该功能放到云端会更合适。

常见的Windows Phone不支持的功能

接下来我们列举出一些常见的Windows Phone上不支持的功能,以及有些可行的解决方案。

不支持音频编码

一个常见的feature request是将用户录音编码成mp3之类的格式,并且和其它设备进行交流。但是请注意,音频编码有以下要求:

  • 除非是简单的wav编码,否则必须使用复杂的算法,并且消耗很多计算资源。在一台普通的台式机上使用并行计算编码一首4分钟的歌曲,往往需要半分钟左右,从Windows Phone和其它设备的硬件比较中间我们可以看到,台式机CPU的每个核的主频大概都有Windows Phone的1.7倍,再加上台式机往往有4核,可以预见同样的工作放在手机上进行会是什么样的效果。
  • 有些编码,例如mp3,是有版权的,你不能随随便便使用一个网上找来的类库,必须仔细调查可能产生的法律效应。

所以,我们推荐的做法是,若是单纯要在手机上进行最简单的录音,只需要编码成wav格式即可。wav编码很简单,而且没有版权问题。大家可以参考我们之前的一篇wiki学习如何在Windows Phone上将录音编码成wav。若是你需要更高级的编码,就需要将音频上传至云端,并且在云上进行编码。我们的音频编码系列wiki包括:

你可能会抱怨wav文件比较大,但是请注意,通常你只需要将该文件上传一次至服务器,在云端编码后,其他用户要下载这个文件,就只需要下载一个很小的编码后的文件即可。在你购买Windows Server时,同时也一并购买了一些Windows内置的编码器,例如mp4和aac,所以你只要你使用内置的编码,就不需要考虑法律问题。

无法获得部分网络信息

在Windows Phone中,你可以获得一部分网络相关的信息,例如是否用户当前有联网,是否有wifi,甚至是网络类型(GPRS,3G,等等)。但是也有一部分信息无法获得,例如无法得知机站的信息。

我们推荐大多数的应用程序都不要过多地考虑网络类型,除了一点:是否有wifi。只要没有wifi,就一律认为用户需要支付额外的费用才能联网,并且可能网速相对较慢。所以要对相应的feature做出限制或者询问。例如,你可能希望提醒用户当前没有wifi,并且询问是否还要继续下载并播放电影,或者上传一个较大的文件,等等。有wifi的情况下,可以放心大胆地下载上传较多的数据。

若是你需要定位用户的位置,请一律使用GPS。机站定位只是针对不支持GPS的设备开发的一个workaround,但是所有Windows Phone手机一律支持GPS,所以直接使用GPS即可。就算GPS服务当前不可用(例如强力的太阳风暴影响了卫星),微软的location service也会自动通过机站等信息找到替代的解决方案,你的程序根本不用考虑。有关详细信息,请参考这里

不支持C++和MFC

很多Windows Mobile开发人员都使用C++和MFC开发,但是Windows Phone是不支持这些的。请注意以下几点:

  • C++语言本身并不比C#具有太多的优势,事实上更复杂。其优势主要在于不需要经过CLR,对于一些对性能要求极高的场景可能会比较好。此外,在台式机和笔记本上,C++可以用来开发一些低层的和各种特殊硬件打交道的程序,但是这类程序在Windows Phone上都不适用。
  • MFC是一种很古老的框架,它甚至还在使用GDI和Windows shell control这样的Windows 3.0时代的遗留物,即使在台式机上,现在我们也不推荐大家继续使用了,而是推荐大家使用WPF/Silverlight/HTML。

今后Windows Phone的新版本可能会学习Windows 8,支持C++,但是目前一切还不得而知。可是即使将来Windows Phone支持了C++,UI Framework应该还是XAML,而不会是MFC。所以现在学好XAML/Silverlight是很重要的。

可能你会觉得有很多现成的C++类库无法在Windows Phone上使用。那么首先,还是要仔细考虑,你的场景是否真的适用于一部智能手机,还是说你只是单纯想把一个台式机上的程序快速迁移过来。若是确定了这个场景真的很适合智能手机,那么就想办法花一些时间,将C++代码迁移到C#上去,你会发现,若是这个场景真的适合于智能手机,将C++迁移到C#是很容易的一件事,但若是不适合的场景,可能花很长时间你也无法完成迁移。

无法显示PDF/Word/Excel,等等文档

确实,目前没有很好的第三方类库可以帮助大家解析各种各样的文档。但是请注意这一点:

  • 之前曾经说过,PDF不支持自动换行,而大多数PDF文档都是针对台式机这样的大屏幕优化的,所以放在小屏幕上,即使你能够解析出来,阅读也十分地困难。

所以我们推荐的做法是,若是需要显示PDF,在云上先将PDF转换成HTML,然后在你的程序中,要么嵌入一个WebBrowser,要么使用WebBrowserTask,来显示HTML文档。只要你的HTML文档没有使用很奇怪的CSS布局,浏览器就会自动进行换行。若使你能够考虑到手机的屏幕,在转换时将布局设计得更适合一些,那就更好了!

若是要打开Office文档,你可以将文档存储在server上,并且使用WebBrowserTask打开该文档,这会自动启动Windows Phone上预装的Office软件,用于阅读文档。当然你也可以考虑直接将文档转换成HTML,大多数Word文档转换HTML后效果还是比较好的,Excel和Power Point可能需要仔细思考一下布局。

不支持直接和电脑交互

虽然只要用户安装了Zune,就可以将Windows Phone连接到电脑上,同步一部份文件,但是目前一般的应用程序无法和电脑直接交互。

在这种情况下,请考虑你到底是不是真的需要和电脑直接交互,或者还是通过云服务会更好。

若是你需要同步一些图画,歌曲,和电影,可以将文件保存到手机的library中,用户就可以直接使用Zune进行同步了。

若是你需要同步一般的文件,我们推荐使用云服务。若是你没有自己的云服务,也可以使用SkyDrive。SkyDrive提供了一个强大的API,供任何支持REST的客户端使用,而且针对Windows Phone还有一套client library,方便大家访问SkyDrive。有关详细信息,请参考这里

怎样提feature request

最后,若是有一个功能你真的觉得很适合于智能手机,但是Windows Phone目前不支持,你可以自这里提一个feature request,或者vote一个现有的request。若是有较多的人支持某个feature request,它在下个版本的Windows Phone中被实现的概率就比较大了。

This page was last modified on 22 July 2013, at 05:43.
173 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.

×