利用Launchers和Choosers开发实用手机应用
立即解锁
发布时间: 2025-08-17 00:59:24 阅读量: 1 订阅数: 2 

# 利用 Launchers 和 Choosers 开发实用手机应用
## 1. 引言
在当今的移动开发领域,开发者常常需要与手机的各种功能进行交互。Launchers 和 Choosers 为开发者提供了一种简单的 API 来实现这一目的。尽管目前还无法直接访问手机操作系统或硬件的底层,但微软即将推出的 Mango 更新将包含 1500 个新的 API,这将为开发者带来更多的机会。在此之前,Launchers 和 Choosers 已经能满足许多常见任务的需求,比如发送电子邮件、启动媒体播放器、拨打电话、发送短信、打开网页浏览器、打开应用商店进行应用购买、拍照以及保存电话号码等。
## 2. 自动发送电子邮件
### 2.1 准备工作
Launchers 和 Choosers 略有不同,Choosers 会返回一个值,而 Launchers 则不会。例如,Choosers 可以让你选择一个电子邮件地址、图片或电话号码并返回它;而 Launchers 通常执行一些不返回任何项目的任务,如打开应用商店或启动网页浏览器。它们共享相似的 API,使开发者能够轻松地与手机的核心功能进行交互。
我们将创建一个名为 “LateForWork” 的应用,该应用允许用户选择老板或同事的电子邮件地址,并发送一封预先编写好的邮件,解释自己为什么上班迟到。
具体步骤如下:
1. 在 Visual Studio 中使用 Windows Phone Application 模板创建一个名为 “LateForWork” 的新手机应用。
2. 在 MainPage.xaml 文件中,将应用标题 TextBlock 设置为 “Ch. 8 – Launchers and Choosers”,页面标题 TextBlock 设置为 “late for work”。
3. 将第 1 行的内容 Grid 替换为 StackPanel,并将其 Grid.Row 属性设置为 1。
4. 在 StackPanel 中添加一个名为 “butChooseBoss” 的按钮,其内部 TextBlock 的 Text 属性设置为 “Select boss”。
5. 在按钮下方添加两个 TextBlock,第一个的 Text 属性设置为 “To:”,第二个命名为 “tbTo”,Text 属性设置为 “[email protected]”。
6. 再添加一个 TextBlock,Text 属性设置为 “Body”,然后添加一个名为 “tbBody” 的 TextBox,高度设置为 300,TextWrapping 属性设置为 “Wrap”,Text 属性设置为以下内容:
```plaintext
Good morning. I will be running a little late today due to a power outage last night which reset my alarm clock. Preparations are being made now for my immediate departure. Thank you for your understanding.
```
7. 最后添加一个名为 “butSendEmail” 的按钮,其内部 TextBlock 的 Text 属性设置为 “I'm Late!!!”。
最终的 XAML 代码如下:
```xml
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="Ch. 8 - Launchers and Choosers" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="late for work" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<StackPanel Grid.Row="1">
<Button x:Name="butChooseBoss" Click="butChooseBoss_Click">
<TextBlock Text="Select boss"></TextBlock>
</Button>
<TextBlock Text="To:" Style="{StaticResource PhoneTextNormalStyle}" />
<TextBlock x:Name="tbTo" Text="[email protected]" Style="{StaticResource PhoneTextLargeStyle}" />
<TextBlock Text="Body:" Style="{StaticResource PhoneTextNormalStyle}" Margin="0,20,0,0" />
<TextBox x:Name="tbBody" Height="300" TextWrapping="Wrap"
Text="Good morning. I will be running a little late today
due to a power outage last night which reset my alarm clock.
Preparations are being made now for my immediate departure.
Thank you for your understanding.">
</TextBox>
<Button x:Name="butSendEmail" Click="butSendEmail_Click">
<TextBlock Text="I'm Late!!!"></TextBlock>
</Button>
</StackPanel>
```
### 2.2 实现步骤
所有代码都将放在两个按钮的点击事件处理程序中:
1. 在设计器中双击每个按钮,在代码隐藏文件中创建点击事件处理程序。
2. 由于所有的 Launchers 和 Choosers 都位于 `Microsoft.Phone.Tasks` 命名空间中,因此在代码隐藏文件的顶部添加 `using` 语句。
3. 编写 `butChooseBoss` 点击处理程序:
- 创建一个名为 `chooser` 的变量,并将其设置为一个新的 `EmailAddressChooserTask`。
- 为 `Completed` 事件创建一个处理程序 `chooser_Completed`,然后调用 `Chooser` 的 `Show` 方法。
4. 编写 `chooser_Completed` 处理程序:
- 该处理程序有两个参数,即发送者对象和 `EmailResult`。如果 `EmailResult` 等于 `TaskResult.OK`,则将 `tbTo` TextBlock 的 `Text` 属性设置为结果的 `Email` 属性;如果用户取消了电子邮件地址选择,结果将设置为 `Cancel`,此时不做任何操作。
5. 编写 `butSendEmail` 点击事件处理程序:
- 创建一个名为 `task` 的变量,并将其设置为一个新的 `EmailComposeTask`。
- 将 `Body` 属性设置为 `tbBody` TextBox 的 `Text` 属性,`Subject` 属性设置为 “I'm running late”,`To` 属性设置为 `tbTo` TextBlock 的 `Text` 属性。
- 调用 `task` 的 `Show` 方法。
代码隐藏文件应包含以下代码:
```csharp
private void butChooseBoss_Click(object sender, RoutedEventArgs e)
{
var chooser = new EmailAddressChooserTask();
chooser.Completed += new
EventHandler<EmailResult>(chooser_Completed);
chooser.Show();
}
void chooser_Completed(object sender, EmailResult e)
{
if (e.TaskResult == TaskResult.OK)
tbTo.Text = e.Email;
}
private void butSendEmail_Click(object sender, RoutedEventArgs e)
{
var task = new EmailComposeTask
{
Body = tbBody.Text,
Subject = "I'm running late",
To = tbTo.Text
};
task.Show();
}
```
### 2.3 工作原理
在这个应用中,我们使用了一个 Chooser 和一个 Launcher。可以看到,它们的 API 非常简单。
当在模拟器中运行此应用时,电子邮件地址选择器工作正常,但如果尝试发送电子邮件,会出现错误,因为模拟器不支持设置电子邮件账户。当在设备上运行应用并点击 “Send” 按钮时,会提示选择一个电子邮件账户,然后电子邮件将在电子邮件编辑器中打开,相应的字段已设置好。点击应用栏上的 “Send” 即可发送邮件。
## 3. 处理常见的 “关于我们” 任务
### 3.1 准备工作
为了增加应用在应用商店中的评价数量,我们可以在应用中添加一些功能,方便用户直接进行评价。同时,当我们在应用商店中有多个应用时,还可以进行交叉营销。另外,提供一个按钮让用户打开我们的网站,了解更多关于公司的信息或查看隐私政策也是常见的需求。
我们将复用 “LateForWork” 应用,添加一个 “关于我们” 部分,并添加一些按钮。利用 Pivot 控件创建一个简单的设计,包含两个面板,一个用于电子邮件撰写,另一个用于应用信息展示。
具体步骤如下:
1. 引用 `Microsoft.Phone.Controls` 程序集,并在页面顶部添加一个名为 “Controls” 的命名空间引用。
2. 在页面顶部的 `LayoutRoot` StackPanel 之前添加一个 Pivot 控件,包含两个内部的 PivotItem 控件。
3. 将应用标题从 `ApplicationTitle` TextBlock 移动到 Pivot 的 `Title` 属性,将页面标题从 `PageTitle` TextBlock 移动到第一个 PivotItem 实例的 `Header` 属性。
4. 将旧内容网格第 1 行的 StackPanel 移动到第一个 PivotItem 中,并移除 `Grid.Row` 属性。
5. 将第二个 PivotItem 实例的 `Header` 属性设置为 “about”,并在其中添加一个 StackPanel。
6. 在 StackPanel 中添加三组 TextBlock 和带有 TextBlock 的 Button,并设置以下属性:
- 第一组:
- TextBlock 的 `Text` 属性设置为 “If you like this app, please add a review”。
- Button 的 `Name` 属性设置为 “butAddReview”,内部 TextBlock 的 `Text` 属性设置为 “Add Review”。
- 第二组:
- TextBlock 的 `Text` 属性设置为 “If you like this app, check out our other app”。
- Button 的 `Name` 属性设置为 “butOtherApp”,内部 TextBlock 的 `Text` 属性设置为 “Other App”。
- 第三组:
- TextBlock 的 `Text` 属性设置为 “Visit our website for more information about us”。
- Button 的 `Name` 属性设置为 “butVisitWeb”,内部 TextBlock 的 `Text` 属性设置为 “Acme.com”。
最终的 XAML 代码如下:
```xml
<Controls:Pivot Title="Ch. 8 - Launchers and Choosers">
<Controls:PivotItem Header="late for work">
<StackPanel>
<Button x:Name="butChooseBoss"
Click="butChooseBoss_Click">
<TextBlock Text="Select boss"></TextBlock>
</Button>
<TextBlock Text="To:" Style="{StaticResource
PhoneTextNormalStyle}" />
<TextBlock x:Name="tbTo" Text="[email protected]"
Style="{StaticResource PhoneTextLargeStyle}" />
```
0
0
复制全文
相关推荐










