在Windows Phone中当应用程序需要获取手机中的信息时,比如联系人的手机号码或者拍摄照片,都要启动相应的“任务”。而在Windows Phone对这些任务进行了分类,一种叫做启动器(launcher),另一种叫做选择器(chooser)。

启动器(launcher)

正如它们的名字,启动器就是用于启动手机中另外一个应用程序的任务。可以发送电子邮件、文本消息或在浏览器中显示Web页面等。但启动器不会向应用程序返回任何数据。

选择器(chooser)

选择器和启动器很相像,而选择器是可以向应用程序返回信息的任务。例如,请求用户拍摄照片或者选择一个电话号码等。

下面列出Windows Phone中的所有任务及返回的数据类型。

调用任务的常见模式是创建一个它的实例,设置所需的属性,然后调用Show方法。例如,使用下面的几行代码调用任务,拍摄照片,并将拍摄的图片设置为grid的背景:

 1 arc.EndAngle = 0;
 2 CameraCaptureTask nCamera = new CameraCaptureTask();
 3 nCamera.Completed += new EventHandler<PhotoResult>(Camera_Completed);
 4 nCamera.Show();
 5
 6 void Camera_Completed(object sender, PhotoResult e)
 7 {
 8     if (e.TaskResult == TaskResult.OK)
 9     {
10         if (e.ChosenPhoto != null && e.OriginalFileName.Length > 0)
11         {
12             BitmapImage bitMap = new BitmapImage();
13             bitMap.SetSource(e.ChosenPhoto);
14
15             ImageBrush imageBrush = new ImageBrush();
16             imageBrush.ImageSource = bitMap;
17
18             ContentPanel.Background = imageBrush;
19         }
20     }
21 }

对于选择器而言,还要为Completed时间附加一个事件处理程序。当选择器应用程序关闭时,就会调用Completed事件,可以通过事件参数来访问任何返回值。如前所述,由于启动器不返回任何信息,所以无法指示启动器的完成情况。

注意

在浏览每个不同的任务之前,了解Windows Phone应用程序被切换至后台时的行为是至关重要的。因为无论启动器还是选择器调用的时候都会引发墓碑机制的。

如果上述代码是在一个Button的Click方法中创建创建的CameraCaptureTask类的实例。当调用此方法时,会创建CameraCaptureTask,关联事件处理程序,并显示相应的选择器。最后会将焦点从该应用程序移走,并将其切换至后台。

1         private void Button_Click(object sender, RoutedEventArgs e)
2         {
3             CameraCaptureTask nCamera = new CameraCaptureTask();
4             nCamera.Completed += new EventHandler<PhotoResult>(Camera_Completed);
5             nCamera.Show();
6         }

如果显示选择器时,应用程序被终止了会发生什么情况?更重要的是,当用户拍完照返回到应用程序时会发生什么?

应用程序会重新启动并导航到当时的页面。在此处会遇到一个问题,即在方法的作用域中定义了选择器任务(如前面的代码片段所示)。由于实例的创建和事件处理程序的关联都只在方法的作用域中,所以系统不知道如何使用选择器任务的结果去调用Camera_Completed方法。

正确的使用方法

使用选择器任务的正确方法是将选择器创建为一个实例级别的变量。在以下代码中,CameraCaptureTask的实例化在MainPage的构造函数中进行,同时在构造函数的结尾处为Completed事件关联处理程序。

 1     public partial class MainPage : PhoneApplicationPage
 2     {
 3         private CameraCaptureTask nCamera = new CameraCaptureTask();
 4
 5         public MainPage()
 6         {
 7             InitializeComponent();
 8
 9             this.nCamera.Completed += new EventHandler<PhotoResult>(nCamera_Completed);
10         }
11
12         private void Button_Click(object sender, RoutedEventArgs e)
13         {
14             this.nCamera.Show();
15         }
16
17         void nCamera_Completed(object sender, PhotoResult e)
18         {
19             .........
20         }
21     }

在此代码中,当选择器任务完成并重新启动应用程序时,MainPage会创建CameraCaptureTask同时关联Completed事件。为Completed事件关联事件处理程序的过程是为了检查是否有被挂起待引发的事件。当应用程序从选择器返回时确实包含此类事件,所以会调用事件处理程序。

转载于:https://www.cnblogs.com/qq278360339/archive/2012/06/01/2530497.html

启动器和选择器学习-----(1)总括相关推荐

  1. 启动器和选择器学习-----(5)启动器

    我们以及学习了选择器的使用,下面还有其他的7个启动器,可以用于应用程序中启动手机中的其他活动. 1.SearchTask SearchTask提供了一种通过由SearchQuery属性提供的特定搜索字 ...

  2. Windows Phone 7的启动器和选择器

    启动器和选择器是Windows Phone向开发者提供的两组API,使应用程序能方便地调用API完成手机内置的一些常规任务,例如打电话,发电子邮件和拍照片. 在Windows Phone操作系统中,所 ...

  3. CSS入门---复合选择器学习与掌握

    css基础选择器的学习与掌握 一. css复合选择器分为:后代选择器,子选择器,并集选择器,伪类选择器(css选择器具体分类看我css选择器思维导图) 二. (1)后代选择器 元素1 元素2{ 声明 ...

  4. CSS选择器学习小结

    前言: 半途出家做Front End,以前只是大概知道点,现在就必须从头把css好好看看啦,呜呜~~~~~~ 一.基本选择器 序号 选择器 含义 1. * 通用元素选择器,匹配任何元素 2. E 标签 ...

  5. css 选择器学习笔记

    网站链接: https://www.w3.org/TR/CSS21/selector.html CSS支持的所有选择器: 选择器 grouping 当几个选择器共享同一部分属性时,选择器可以放到同一组 ...

  6. CSS选择器学习笔记

    在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素. "CSS" 列指示该属性是在哪个 CSS 版本中定义的.(CSS1.CSS2 还是 CSS3.) 选择器 例子 例子 ...

  7. JQuery选择器学习总结JQuery选择器

    一.选择器的种类 1.根据获取页面中元素的不同,分为 基本选择器,层次选择器,过滤选择器,表单选择器四大类. 2.过滤选择器:简单过滤选择器.内容过滤选择器.可见性过滤选择器.属性过滤选择器.子元素过 ...

  8. CSS选择器学习小结 (css基本选择器 + 组合选择器 + :nth-child()高级选择器)

    目录 css基本选择器: 通用选择器: 格式: 元素选择器: 格式: 样例: id选择器: 格式: class类选择器: 格式: 分组选择器: 格式: 基本选择器的权重: css组合选择器: 后代选择 ...

  9. QT QColor颜色选择器学习

    在做pcl的配准的时候,需要用不同的颜色来区分源点云和目标点云,找了一些资料发现QColor可以实现这个功能. 添加头文件#include <QColorDialog>后,可以通过 QCo ...

最新文章

  1. GARFIELD@07-08-2005 DILBERT
  2. matplotlib 多子图的画法 - 设置坐标范围 - 设置坐标的显示间隔 - 设置figure的大标题 - 设置x轴和y轴的名称 - df.groupby
  3. React绑定this的三种方式
  4. JAVA不同类型数组重载_方法的重载;数组 (Java Day05)
  5. lightbox自定义图片大小的实现
  6. linux 32bit 改为64bit问题
  7. 都是程序员,凭什么他工资比我高,下班比我早?
  8. mysql java事物回滚吗_为什么 MySQL 回滚事务也会导致 ibd 文件增大?
  9. 联想笔记本那些有手写功能_联想高端翻转本YOGA C940开启促销 配一体式转轴音响还可私人订制...
  10. OFDM简介--OFDM的发送(1)
  11. MYSQL数据库升级
  12. Camera Link相机接口
  13. 浅析APP应用内及新媒体类推广渠道
  14. Android虚拟机和类加载机制
  15. java毕业设计web高校车辆调度系统设计与实现源码+系统+数据库+lw文档+调试运行
  16. 【odoo15】添加Chatter到表单视图,创建[发送消息][记录备注][安排活动]
  17. 记事本中写c/c++程序在Windows下运行
  18. 单招问你为什么学计算机,单招面试难吗 单招面试一般会问什么问题
  19. Linux——网络应用与服务
  20. Python编程:从入门到实践第六章读书笔记6.3遍历字典

热门文章

  1. XPath CheatSheet
  2. 一个复平面上的不等式
  3. 【C++】【一日一练】读写文件小实例【20140510】
  4. 想到Exchanger N parties的一种用法
  5. 使用Sencha Touch加载本地Json数据
  6. 编制一个函数jsValue(),求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的四位数的平均值pjz1,以及不满足此条件的四位数的平均值pzj2
  7. 渲染器跑分_碾压图灵43!NVIDIA安培第一个跑分震撼出炉
  8. 前后端分离后 前端获得session数据_机器学习模型部署--打通前后端任督二脉
  9. POI SXSSFWorkbook 实现大批量数据 导出
  10. 继承AppCompatActivity的Activity无法隐藏标题栏