Windows Phone 7 开发常见问题汇总

转载 2012年03月22日 17:34:58
1.      开发Windows Phone应用程序需要安装哪些组件?

2.      Windows Phone开发的学习资源有哪些?

3.      我要去哪里提出对Windows Phone开发平台的建议?

4.      Windows Phone主要有哪些通信方式?

5.      Windows Phone访问REST service支持哪些验证方式?

6.      我能否启动一个后台进程?

7.      怎样在Windows Phone不同页面间传值?

8.      Windows Phone提供了哪些类型的推送通知服务?

9.      我能否开发一个系统组件?

10.         如何在Windows Phone模拟器中模拟多点触摸?

11.         在程序运行时怎样防止WP7自动锁屏?

12.         如何设置手机的横竖显示方向?

13.         如何隐藏System Tray?

14.         OnNavigatedTo和OnNavigatedFrom的区别是什么?

15.         如何动态修改 shell:ApplicationBarIconButton显示图片?

16.         如何使应用在手机锁定状态仍可以运行和震动?

17.         如何使手机震动? 如何使在震动的手机停止震动?

18.         如何使用WP7的收音机?

19.         如何使用CameraCaptureTask进行图像获取?

20.         XNA中如何弹出带有按钮处理事件的消息?

21.         手势有哪些基本操作(XNA)?

22.         XNA支持哪些手势?

23.         出现Invalid attribute value controls:LongListSelector for property TargetType这个错误的可能原因是什么?

Answers:

1.       开发Windows Phone应用程序需要安装哪些组件?

您只要安装Windows Phone SDK 7.1就已经包含最基本的windows phone开发所需工具:

·         Microsoft Visual Studio 2010 Express for Windows Phone

·         Windows Phone Emulator

·         Windows Phone SDK 7.1 Assemblies

·         Silverlight 4 SDK and DRT

·         Windows Phone SDK 7.1 Extensions for XNA Game Studio 4.0

·         Microsoft Expression Blend SDK for Windows Phone 7

·         Microsoft Expression Blend SDK for Windows Phone OS 7.1

·         WCF Data Services Client for Window Phone

·         Microsoft Advertising SDK for Windows Phone

可以选择性安装 Silverlight for Windows Phone Toolkit,其中提供了很多可直接使用的windows phone控件。

如果想要方便程序界面设计,推荐安装Expression Blend 4。


2.       Windows Phone开发的学习资源有哪些?

·         我们推荐你从portal开始:

http://msdn.microsoft.com/zh-cn/ff380145

http://create.msdn.com/en-US/

·         免费在线培训课程

WP7: http://msdn.microsoft.com/en-us/wp7trainingcourse.aspx

Mango: http://msdn.microsoft.com/en-US/WP7MangoTrainingCourse

·         MSDN文档

http://msdn.microsoft.com/zh-cn/library/ff402535.aspx   

·         开源代码实例

http://msdn.microsoft.com/zh-cn/library/ff431744.aspx

·         Programming Windows Phone 7免费电子书

http://blogs.msdn.com/b/microsoft_press/archive/2010/10/28/free-ebook-programming-windows-phone-7-by-charles-petzold.aspx

3.       我要去哪里提出对Windows Phone开发平台的建议?

如果您需要的一个功能在目前版本的Windows Phone不支持,可以去WPDev 反馈网站提交您的建议和意见。同时您也可以对已提交的建议进行投票,如果有足够多的人要求添加该功能,在未来的某个Windows Phone版本中就很可能实现了。

4.       Windows Phone主要有哪些通信方式?

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

Windows Phone也支持部分PC上的通信方式。

·         HTTP

可以使用WebClient或者HttpWebRequest访问REST service。

·         SOAP 1.1

可以访问支持SOAP 1.1的SOAP service,例如使用BasicHttpBinding的WCF service。请注意大多数手机,例如iPhone和Android,都不支持SOAP(虽然有第三方类库),所以我们推荐尽量使用REST。

·         REST

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

·         Socket

WP7.1提供了部分socket的支持,有关详细信息请参考Windows Phone Socket 。

Socket适合于对性能要求高的场合,因为TCP相比较HTTP快一些。

5.       Windows Phone访问REST service支持哪些验证方式?

Windows Phone支持Basic Authentication和OAuth两种验证方式。

·         Basic Authentication

在简单的场合下,你可以使用basic authentication。请注意使用SSL加密通信。使用Basic Authentication的方式和普通的Silverlight程序是一样的,请参考

Windows Phone 7: Basic Authentication over HTTPS。

·         OAuth

使用OAuth可以使你的服务被第三方客户端访问,例如Windows Live Connect,Windows Azure ACS,Facebook,Google API,都支持OAuth。使用OAuth的方法,请参考

OAuth2 and OData Service in a Windows Phone 7 app 。

6.       我能否启动一个后台进程?

Windows Phone强调用户体验,强调电池使用效率,因此不支持后台进程。但是考虑到很多程序确实需要在后台做一些事,在WP7.1中提供了后台代理的功能。

使用后台代理,你可以要求系统在你的程序不处于运行状态时执行某些任务,但是系统不保证任务的优先级,若是多个程序都申请要执行后台任务,有可能你的任务必须等到其它程序申请的某个任务完成后才能执行。

7.       怎样在Windows Phone不同页面间传值?

Windows Phone页面间传值主要有三种方式:

·         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中定义一个属性。

8.       Windows Phone提供了哪些类型的推送通知服务?

大体上分为三种 推送通知的方式,Raw、Toast和Tile。



·         Raw

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



·         Tile

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

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



·         Toast

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



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



了解更多推送服务,请查看以下详细文档:

http://msdn.microsoft.com/en-us/WP7MangoTrainingCourse_PushNotificationsMangoLab

http://msdn.microsoft.com/zh-cn/library/ff402537(v=VS.92).aspx

9.       我能否开发一个系统组件?

目前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。


10.       如何在Windows Phone模拟器中模拟多点触摸?


如果有支持多点触摸的显示器,则可以直接利用显示器进行多点触摸的测试。但如果没有支持多点触摸的显示器,我们可以通过安装Multi Touch Vista然后用两个鼠标来模拟多点触摸。 但是目前只在windows 7系统上支持。以下链接中介绍了详细的操作流程。

http://michaelsync.net/2010/04/06/step-by-step-tutorial-installing-multi-touch-simulator-for-silverlight-phone-7

11.       在程序运行时怎样防止WP7自动锁屏?

可以借助Guide.ScreenSaveEnabled 属性来防止系统检测手机空闲的状态。

UserIdleDetectionMode属性

Windows Phone 空闲检测 

12.       如何设置手机的横竖显示方向?

在头部的<phone:PhoneApplicationPage>内有属性SupportedOrientations和Orientation。 SupportedOrientations为支持的显示方向。Orientation为当前的显示方向。他们的值都有三种选择:

·         Portrait:纵向。

·         Landscape:横向。

·         PortraitOrLandscape:纵向或横向。

13.       如何隐藏System Tray?

在头部的<phone:PhoneApplicationPage>内添加属性shell:SystemTray.IsVisible="False"即可隐藏System Tray。

14.       OnNavigatedTo和OnNavigatedFrom的区别是什么?

OnNavigatedTo是从其他页面跳转到当前页面时触发的事件,  OnNavigatedFrom是从当前页面跳转到其他页面时触发的事件,简单的理解 OnNavigatedTo”ThisPage”和 OnNavigatedFrom”ThisPage”。


15.       如何动态修改 shell:ApplicationBarIconButton显示图片?

IApplicationBarIconButton iconButton = this.ApplicationBar.Buttons[0] as IApplicationBarIconButton;
iconButton.IconUri = new Uri(“Images/icon.png”, UriKind.Relative);

16.       如何使应用在手机锁定状态仍可以运行和震动?

设置PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode. Enabled;

但是,这个设置是单向的,当设置为Disabled后,就不能再设置为Default.

17.       如何使手机震动? 如何使在震动的手机停止震动?

使手机震动:VibrateController.Default.Start(TimeSpan.FromSeconds(.5));

使在震动的手机停止震动: VibrateController.Default.Stop();

18.       如何使用WP7的收音机?

·         FMRadio.Instance.SignalStrength:获取信号强度.

·         FMRadio.Instance.Frequency:获取当前的频率.

·         FMRadio.Instance.PowerMode = RadioPowerMode.On;打开收音机.

·         FMRadio.Instance.PowerMode = RadioPowerMode.Off;关闭收音机.

19.       如何使用CameraCaptureTask进行图像获取?

请参见以下代码

private void button1_Click(object sender, RoutedEventArgs e)
{
    CameraCaptureTask camera = new CameraCaptureTask();
    camera.Completed += OnCameraCaptureTaskCompleted;
    camera.Show();
}

void OnCameraCaptureTaskCompleted(object sender, PhotoResult args)
{
    if (args.TaskResult == TaskResult.OK)
    {
        BitmapImage bmp = new BitmapImage();
        bmp.SetSource(args.ChosenPhoto);
        img.Source = bmp;
    }
}


20.       XNA中如何弹出带有按钮处理事件的消息?

1.       添加Microsoft.Xna.Framework.GamerServices的引用

应用以下代码:

    Guide.BeginShowMessageBox("标题","我是消息,我被弹出来了!",new string[] { "是", "否" }, 0, MessageBoxIcon.None, new AsyncCallback(OnMessageBoxClosed), null);

        void OnMessageBoxClosed(IAsyncResult result)
    {
          int? buttonIndex = Guide.EndShowMessageBox(result);
          if (buttonIndex == 1)
          {
              //执行当”是”按钮被按下时候的处理代码
          }
          else if(buttonIndex == 2)
          {
              //执行当” 否”按钮被按下时候的处理代码
          }
          else 
          {
              //当后退按钮被按下时,需要处理的代码
          }
     }


21.       手势有哪些基本操作(XNA)?

·         获取手势并处理:

while (TouchPanel.IsGestureAvailable)
{
    GestureSample gestureSample = TouchPanel.ReadGesture();
    if (gestureSample.GestureType == GestureType.Tap) 
    { 
    }
}


·         获取上一时刻的TouchLocation:

TouchLocation previousTouchLocation;
bool success = touchLocation.TryGetPreviousLocation(out previousTouchLocation);


·         获取屏幕多点触摸的所有Touch:

TouchCollection touchLocations = TouchPanel.GetState();
foreach (TouchLocation touchLocation in touchLocations)
{
}


·         设置可用的手势:

TouchPanel.EnabledGestures = GestureType.Tap;

22.       XNA支持哪些手势?

·         Tap:手指单击

·         DoubleTap:手指双击

·         Hold:手指碰触并固定一段时间

·         FreeDrag:自由移动手指

·         VerticalDrag:上下移动手指

·         HorizontalDrag:左右移动手指

·         DragComplete:移动结束

·         Flick:滑过(手指抬起时不停止)

·         Pinch:缩小和延伸

·         PinchComplete:缩小和延伸结束

23.       出现Invalid attribute value controls:LongListSelector for property TargetType这个错误的可能原因是什么?

出现这个错误的原因可能是,你所创建的项目的版本与所使用的SDK版本不符合。

解决方案:

·         如果你创建的是一个7.0的项目,需要安装Silverlight for Windows Phone Toolkit - Feb 2011。

·         如果你想使用最新版本的windows phone toolkit,请将项目升级为7.1版的(右击项目,选择Upgrade to Windows Phone 7.1)

相关文章推荐

windows7详解及常见问题

  • 2011年04月04日 16:16
  • 316KB
  • 下载

Windows7 + apache2.2 + php5.2 + mysql5.5常见问题

一、apache无法找到php模块 httpd.conf中,加入: LoadModule php5_module E:/green/php-5.2.17-Win32-VC6-x86/php5apa...
  • smstong
  • smstong
  • 2012年06月14日 22:01
  • 2844

西门子STEP_7顺控常见问题汇总

  • 2014年11月12日 10:56
  • 872KB
  • 下载

联想笔记本出厂预装Windows 8系统机型改装Windows 7系统的操作步骤及常见问题(转自联想官网)

 故障现象:   修改前的注意事项:若您确定要将您笔记本预装的Windows 8系统改装为Windows 7系统,请注意如下重要事项: 1. 由于您笔记本预装的Windows 8系...

WINDOW7蓝屏错误代码、使用常见问题、解决方法汇总

关于Windows 7、Vista等系统的蓝屏,都有很多文章讨论过,但是都是筛选的常见的一些问题,今天这个文章是个大全,希望大家看着别头痛,文章收藏下来以后待查即可。 11-...
  • Omarix
  • Omarix
  • 2011年09月16日 08:18
  • 2477

WP7开发工具Windows Phone Developer Tools安装包官方下载 安装问题

在网上找的方法。 Windows Phone Developer Tools的安装问题 在Silverlight for Windows Phone网站上我们看到只有一个在线安装包,而这个在线安装可...

WIN7上搭建Windows Phone 8 开发环境——VMware Workstation下Win8 “无法安装Hyper-V, 某个虚拟机监控程序正在运行”问题解决的办法

原地址:http://www.cnblogs.com/shaddock2013/p/3155024.html 最近在试着在Windows 7上搭建Windows Phone 8的开发调试环境,使...

Windows Azure 常见问题汇总

Windows Azure大家或多或少都听说过,由于一直在国内没有上线,所以大家对Windows Azure总是存有很多问题。在此,我将一些常见的Windows Azure问题发布出来,希望对大家有所...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows Phone 7 开发常见问题汇总
举报原因:
原因补充:

(最多只允许输入30个字)