• Windows Phone 8.1新特性


    Windows Phone 8.1 Preview SDK 发布也有几个月了,之前断断续续也写过几篇 Windows Phone 8.1 新特性的文章,今天给大家介绍一下应用商店启动协议相关的知识。

    关于这方面,想必大家心里都有很多疑问,为什么 Windows Phone 8.0 时代的 MarketplaceDetailTask、MarketplaceReviewTask 和 MarketplaceSearchTask 都不见了呢?这种问题在MSDN、stackoverflow等网站上都很多次的出现,我也在这些网站多次回答了类似这样的问题。

    是的,确实不见了,SDK不再给我们提供这方面的类,而是需要通过启动协议来实现:Windows.System.Launcher.LaunchUriAsync(Uri uri)。

    博客园里也有同学的博客介绍了这个方法的具体实现方式:Windows Phone 8.1商店启动协议,这里我再做一些补充,然后把这几个协议进行一下类似 Windows Phone 8.0 时代的封装。

    1.  显示指定产品的详细信息页面(MarketplaceDetailTask)

    启动协议:var uri = new Uri(string.Format("ms-windows-store:navigate?appid={0}", appid));

    这里的appid可以指定为CurrentApp.AppId,就是跳转到当前应用详细页面;也可以指定为特定的AppId,就是跳转到特定的应用详细页,这种情况在做推荐应用的时候便会用到。

    我们对它进行这样的封装:

    using System;
    using System.Threading.Tasks;
    using Windows.ApplicationModel.Store;
    
    namespace Windows.ApplicationModel.Tasks
    {
        public sealed class MarketplaceDetailTask
        {
            public MarketplaceDetailTask()
            { }
    
            /// <summary>
            /// 获取或设置要显示的产品的唯一标识符。
            /// </summary>
            public string ContentIdentifier { get; set; }
    
            /// <summary>
            /// 显示 Windows Phone 商城 客户端应用程序并显示指定产品的详细信息页面。
            /// </summary>
            public async void Show()
            {
                await Windows.System.Launcher.LaunchUriAsync(
                    new Uri(string.Format("ms-windows-store:navigate?appid={0}", 
                                            string.IsNullOrEmpty(ContentIdentifier) ? 
                                            CurrentApp.AppId.ToString() : 
                                            ContentIdentifier)));
            }
        }
    }

    调用方法:

    // 默认启动当前应用详细页面
    MarketplaceDetailTask task1 = new MarketplaceDetailTask();
    task1.Show();
    
    // 启动特定应用详细页面
    MarketplaceDetailTask task2 = new MarketplaceDetailTask();
    task2.ContentIdentifier = "some app id";
    task2.Show();

    2. 显示指定产品的评论页面(MarketplaceReviewTask)

    启动协议:var uri = new Uri(string.Format("ms-windows-store:reviewapp?appid={0}", appid));

    这里的appid我们设定为当前应用的ID,因为在应用中评论别的应用是不合理的。

    我们对它进行这样的封装:

    using System;
    using System.Threading.Tasks;
    using Windows.ApplicationModel.Store;
    
    namespace Windows.ApplicationModel.Tasks
    {
        public sealed class MarketplaceReviewTask
        {
            public MarketplaceReviewTask()
            { }
    
            public async void Show()
            {
                await Windows.System.Launcher.LaunchUriAsync(
                    new Uri("ms-windows-store:reviewapp?appid=" + CurrentApp.AppId));
            }
        }
    }

    调用方法:

    MarketplaceReviewTask task = new MarketplaceReviewTask();
    task.Show();

    3. 显示产品搜索页面(MarketplaceSearchTask)

    启动协议:var uri = new Uri(string.Format(@"ms-windows-store:search?keyword={0}",keyword));

    这里的keyword就是我们要搜索的关键字,有时候我们需要搜索我们的开发者账号对应的所有应用,这时候可以把keyword设置为开发者名称。但是如果你的开发者名称与很多产品相似,比如名称为:微博,这时候搜索的结果就包括了微博应用,而不只是你的“微博”开发者名下的应用(好吧,有点绕嘴了)。这时候我们可以把keyword搜索改成publisher搜索。

    基于keyword和publisher两种搜索方式,我们进行这样的封装:

    using System.Threading.Tasks;
    using Windows.ApplicationModel.Store;
    
    namespace Windows.ApplicationModel.Tasks
    {
        public sealed class MarketplaceSearchTask
        {
            public MarketplaceSearchTask(SearchTermsType type)
            {
                this.Type = type;
            }
    
            public string SearchTerms { get; set; }
    
            public SearchTermsType Type { get; set; }
    
            public async void Show()
            {
                await Windows.System.Launcher.LaunchUriAsync(
                    new Uri(string.Format("ms-windows-store:search?{0}={1}", this.Type.ToString() ,SearchTerms)));
            }
        }
    
        public enum SearchTermsType
        {
            Keyword,
            Publisher
        }
    }

    调用方法:

    // 搜索'shaomeng'开发者名下的所有应用
    MarketplaceSearchTask task1 = new MarketplaceSearchTask(SearchTermsType.Publisher);
    task1.SearchTerms = "shaomeng";
    task1.Show();
    
    // 搜索含有关键字'微博'的所有应用
    MarketplaceSearchTask task2 = new MarketplaceSearchTask(SearchTermsType.Keyword);
    task2.SearchTerms = "微博";
    task2.Show();

    好了,到这里我们就把常用的应用商店启动协议介绍完了。希望能够帮助到大家。Windows Phone 8.1 的“坑”还有很多,如果大家有其他找不到的启动协议,请留下评论,我会持续去更新,谢谢。

  • 相关阅读:
    转贴:.net中using的几种用途
    codebehind的优先权大于codeinline
    access的存储过程
    11.26笔记
    vs2005中的快捷键总结
    关于填充datagrid
    猫叫了,所有老鼠开始逃跑经典面试题
    面向对象的三个基本特征(讲解)
    在中文VS2008中安装ASP.NET MVC框架
    测试驱动开发全功略
  • 原文地址:https://www.cnblogs.com/shaomeng/p/3875759.html
Copyright © 2020-2023  润新知