×
Namespaces

Variants
Actions

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

From Nokia Developer 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 08:43.
86 page views in the last 30 days.
×