导出 (0) 打印
全部展开

如何与 Windows Phone 的应用程序即时应答集成

2012/2/9

在 Windows Phone 7.5 中,可以从应用即时应答启动 Windows Phone 应用程序。应用即时应答提供一个指向具有搜索结果的相关 Windows Phone 应用程序的链接。如果您的应用程序是从应用即时应答启动的,则它可以确定导致启动的搜索条件,并立即使用这些术语提供基于这些术语的丰富用户体验。

本主题介绍如何创建一个基本的应用程序,该应用程序确定它是否由应用即时应答启动、相应的搜索条件内容以及如何模拟应用即时应答启动。有关将您的应用程序与搜索体验集成的其他方法的信息,请参阅 Windows Phone 的搜索可扩展性概述

本主题包括以下主要步骤:

  1. 创建 UI

  2. 检查应用即时应答启动

  3. 完成应用程序

  4. 模拟应用即时应答启动

注意注意:

以下过程中的步骤用于 Visual Studio 2010 Express for Windows Phone。 当您使用用于 Visual Studio 2010 Professional 或 Visual Studio 2010 Ultimate 的插件时,您可能会看到菜单命令或窗口布局中的一些微小改变。

在本节中,创建一个基本的 UI 以显示应用即时应答参数和值,或声明应用程序未由应用即时应答启动的消息。根据启动应用程序的方式,折叠相应的 TextBlock 控件或使其可见。

创建 UI

  1. 在 Visual Studio 2010 Express for Windows Phone 中,通过选择“文件 | 新建项目”菜单命令创建一个新项目。

  2. 将显示“新建项目”窗口。展开“Visual C#”模板,然后选择“Silverlight for Windows Phone”模板。

  3. 选择“Windows Phone 应用程序”模板。用您选择的名称填写“名称”框。

  4. 单击“确定”。将显示“新建 Windows Phone 应用程序”窗口。

  5. “Windows Phone 目标版本”菜单中,确保已选择 Windows Phone 7.1。

  6. 单击“确定”。将创建一个新的项目,并且“MainPage.xaml”将在 Visual Studio 设计器窗口中打开。

  7. “MainPage.xaml”中,使用以下代码替换名为 LayoutRoot 的网格。

        <!--LayoutRoot is the root grid where all page content is placed-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <!--TitlePanel contains the name of the application and page title-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock 
                    x:Name="ApplicationTitle" 
                    Text="APP INSTANT ANSWER EXAMPLE" 
                    Style="{StaticResource PhoneTextNormalStyle}"/>
                <TextBlock 
                    x:Name="PageTitle" 
                    Text="URI details" 
                    Margin="9,-7,0,0" 
                    Style="{StaticResource PhoneTextTitle1Style}"/>
    
                <!-- Made visible when app is launched by App Instant Answer, otherwise collapsed. -->
                <TextBlock
                    x:Name="txtUriParameterName"
                    Text="bing_query" 
                    TextWrapping="Wrap" 
                    Style="{StaticResource PhoneTextExtraLargeStyle}"
                    Visibility="Collapsed"/>
                <TextBlock
                    x:Name="txtUriParameterValue"
                    Text="URI parameter value here" 
                    TextWrapping="Wrap" 
                    Style="{StaticResource PhoneTextAccentStyle}"
                    Visibility="Collapsed"/>
    
                <!-- Made visible when app is not launched by App Instant Answer, otherwise collapsed. -->
                <TextBlock
                    x:Name="txtNoLaunch"
                    Text="This application was not launched by an App Instant Answer." 
                    TextWrapping="Wrap" 
                    Style="{StaticResource PhoneTextSubtleStyle}"
                    Visibility="Collapsed"/>
                
            </StackPanel>
        </Grid>
    
    

    名为 txtUriParameterNametxtUriParameterValueTextBlock 控件分别显示应用即时应答 URI 参数名称和值。值与导致应用程序启动的搜索条件相对应。名为 txtNoLaunchTextBlock 显示一则消息,指示应用即时应答未启动应用程序。

  8. 在主页的代码隐藏文件 MainPage.xaml.cs 中,向 MainPage 构造函数中添加以下代码。

                // Configure event handler for page Loaded event.
                this.Loaded += new RoutedEventHandler(MainPage_Loaded);
    
    

    页面加载时,会调用 MainPage_Loaded 事件(即,将在下一步中创建的方法)。

在这一部分中,添加代码以检查启动 URI 中是否存在 bing_query URI 参数。如果存在 bing_query,则从应用即时应答启动应用程序。如果不存在,则为标准应用程序启动。

检查应用即时应答启动

  • MainPage.xaml.cs 中,向 MainPage 类中添加以下代码。

            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                try
                {
                    // Try to obtain App Instant Answer URI parameter & value.
                    string tempSearchTerms = NavigationContext.QueryString["bing_query"];
    
                    // Show App Instant Answer URI parameter and value.
                    ShowUriParameter(tempSearchTerms);            
                }
                catch
                {
                    // Hide App Instant Answer URI parameter and value.
                    HideUriParameter();
                }
            }
    
    

    如果启动 URI 中存在 bing_query 参数,则调用 NavigationContext QueryString 将返回导致启动的搜索条件。ShowUriParameterHideUriParameter 是将在下一步中创建的帮助器方法。

在本节中,创建用来折叠 UI 元素或使其可见的帮助器方法。根据启动应用程序的方式调用这些方法。

完成应用程序

  • MainPage.xaml.cs 中,向 MainPage 类中添加以下代码。

            void ShowUriParameter(string searchTerms)
            {
                // Hide message that app was not launched by App Instant Answer.
                txtNoLaunch.Visibility = Visibility.Collapsed;
    
                // Show URI parameter and value.
                txtUriParameterName.Visibility = Visibility.Visible;
                txtUriParameterValue.Visibility = Visibility.Visible;
                txtUriParameterValue.Text = searchTerms;
            }
    
            void HideUriParameter()
            {
                // Show message that app was not launched by App Instant Answer.
                txtNoLaunch.Visibility = Visibility.Visible;
    
                // Hide URI parameter and value.
                txtUriParameterName.Visibility = Visibility.Collapsed;
                txtUriParameterValue.Visibility = Visibility.Collapsed;
            }
    
    

在本节中,修改应用程序清单文件以模拟应用程序从应用即时应答启动。模拟应用即时应答启动是必需的,因为无法控制应用即时应答何时显示具有搜索结果的 Windows Phone 应用程序。

注意注意:

必须将您的应用程序提交到商城,然后应用即时应答才能显示具有搜索结果的应用程序。

模拟应用即时应答启动

  1. 在应用程序清单文件 WMAppManifest.xml 中,注释 DefaultTask 元素。该元素指定标准的应用程序启动。

  2. WMAppManifest.xml 中,向 Tasks 元素中添加以下代码。

          <!-- To simulate App Instant Answer launch from search terms "Xbox 360 4 GB Console with Kinect" -->
          <DefaultTask  Name ="_default" NavigationPage="MainPage.xaml?bing_query=Xbox 360 4 GB Console with Kinect"/>
    
    

    DefaultTask 元素模拟应用即时应答从术语“Xbox 360 4 GB Console with Kinect”的 Bing 搜索启动。

    警告说明警告:

    当您完成调试后,取消注释原始的 DefaultTask 元素,以便您的应用程序可以执行标准启动。注释该元素会使实际的应用即时应答启动无法正常工作。一次只能存在一个 DefaultTask 元素。

  3. 按 F5 可调试您的应用程序并将其部署到模拟器或设备。

  4. 观察到应用程序启动到主页并显示 DefaultTask 中所指定的 bing_query 参数和搜索条件。

  5. WMAppManifest.xml 中,注释临时的 DefaultTask 元素并取消注释原始元素。完成后,Tasks 元素应类似于以下代码。

        <Tasks>
          <DefaultTask  Name ="_default" NavigationPage="MainPage.xaml"/>
          
          <!-- To simulate App Instant Answer launch from search terms "Xbox 360 4 GB Console with Kinect" -->
          <!--<DefaultTask  Name ="_default" NavigationPage="MainPage.xaml?bing_query=simulated search terms"/>-->
        </Tasks>
    
    
  6. 按 F5 可调试您的应用程序并将其部署到模拟器或设备。

  7. 观察到应用程序启动到主页并显示有关标准启动的消息。

显示:
© 2014 Microsoft