博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小娜追踪快递
阅读量:4561 次
发布时间:2019-06-08

本文共 3195 字,大约阅读时间需要 10 分钟。

小娜作为我们的全能秘书,能够帮我们设置提醒、推荐新闻、查询天气、聊天讲段子,现在还能帮助我们追踪快递,大家可以移步阅读相关软文,不想移步的朋友也可以通过下面的动图来了解一下效果,看一下Win10上的网购剁手之旅是如何的更加舒适省心。

(以此动图来向热心博主疯狂的懒羊羊表示感谢,该博主向我们推荐了ScreenToGif,使我们的博客更生动)

 

如何在我们的应用/网站中集成“小娜追踪快递”功能呢?

这和把大象装在冰箱一样简单,只需要三步:1)打开IDE,加载工程;2)加入包含ms-cortana://InterestTracking Deep-link的HyperLink或者Button控件;3)编译部署,把IDE关上。

没学会?!好吧,我们还是更详细的讲一下。第一步和第三步就不说了,主要说一下第二步。

首先我们来看一下小娜Deep-link的格式,如下图:

参数部分是URL编码过的Json串,该Json对象是一个数组,数组中的元素包含以下属性:

属性名 注释 类型 
 type  目前该属性值固定为package  string
 CarrierName   快递公司名称  string
 TrackingNumber   快递单号  string

 

 

 

 

可以使用如下代码得到Deep-link字符串:

public class MailPackage{    public string type { get; set; }    public string TrackingNumber { get; set; }    public string CarrierName { get; set; }}public string GenerateCortanaDeepLink(string carrierName, string trackingNumber){    if (string.IsNullOrWhiteSpace(carrierName)        || string.IsNullOrWhiteSpace(trackingNumber))    {        return null;    }    // JSON对象    IList
mailPackages = new List
(); MailPackage mailPackage = new MailPackage { type = "package", TrackingNumber = trackingNumber, CarrierName = carrierName }; mailPackages.Add(mailPackage); // 序列化 var serializer = new DataContractJsonSerializer(typeof(List
)); var stream = new MemoryStream(); serializer.WriteObject(stream, mailPackages); byte[] dataBytes = new byte[stream.Length]; stream.Position = 0; stream.Read(dataBytes, 0, (int)stream.Length); string dataString = Encoding.UTF8.GetString(dataBytes); // Url encode string encodeData = System.Net.WebUtility.UrlEncode(dataString); // DeepLink string url = string.Format("ms-cortana://InterestTracking?parameter={0}", encodeData); return url;}

有了Deep-link后,我们有多种方式来使用

在网页中,将Deep-link作为一个超链接来使用就可以

在UWP应用中,如果你使用的是HyperlinkButton,在XAML中你可以这样用

如果你使用其它控件,你可以在其点击事件处理中加入如下代码

Windows.System.Launcher.LaunchUriAsync("ms-cortana://InterestTracking?parameter={URL encoded package info JSON string}");

 

另外需要提到一点,使用Deep-link的方式来让小娜追踪快递,是在14332之后的预览版才有的功能。淘宝、旺信在发布时考虑到有的用户没有升级预览版,但也有的用户可以提前尝鲜新功能并给我们反馈改进意见,所以在代码中加入了对系统版本的判断,只有系统达到一定版本才能看到追踪快递这个按钮。下面提供两个关于版本号处理的函数,供大家参考。

一个是将当前系统版本号取出并转为字符串:

public static string GetOperatingSystemVersion(){    string sv = AnalyticsInfo.VersionInfo.DeviceFamilyVersion;    ulong v = ulong.Parse(sv);    ulong v1 = (v & 0xFFFF000000000000L) >> 48;    ulong v2 = (v & 0x0000FFFF00000000L) >> 32;    ulong v3 = (v & 0x00000000FFFF0000L) >> 16;    ulong v4 = v & 0x000000000000FFFFL;    string version = $"{v1}.{v2}.{v3}.{v4}";    return version;}

另一个是输入一个版本号,得到对应的ulong值,方便与系统版本号AnalyticsInfo.VersionInfo.DeviceFamilyVersion比较大小:

public static ulong GenerateUlongFromVersion(ushort Major, ushort Minor, ushort Build, ushort Revision){    return ((ulong)Major << 48)        + ((ulong)Minor << 32)        + ((ulong)Build << 16)        + ((ulong)Revision);}

 

是不是很简单啊,有没有很想体验一下啊,快来吧,然后自己动手试一试!示例代码可。

当然,小娜的这个功能还没有正式Release,可能会存在一些Bug。比如我们在内部试用时就发现不同数据源过来的快递公司名称不一致,有的是圆通快递,有的却是圆通速递。针对此,小娜团队积极应对,对能收集到的快递公司名作了对应的映射关系,使得常见的快递公司的不同叫法都可以匹配到正确的记录。

如果各位博主在使用中发现任何问题,欢迎积极的给我们留言。另外,如果你对这个功能有任何好的建议或期望,也请告诉我们,万一哪天实现了呢。

转载于:https://www.cnblogs.com/ms-uap/p/5566129.html

你可能感兴趣的文章
Is it possible to display icons in a PopupMenu?
查看>>
Atitit.常见的4gl 第四代编程语言 与 dsl
查看>>
Atitit js es5 es6新特性 attilax总结
查看>>
JavaWeb学习记录(三)——网页中文编码问题
查看>>
$( document ).ready()&$(window).load()
查看>>
关于Baidu Map(百度地图SDK)的各种骚b问题!
查看>>
喜欢的一些话(不断更新)
查看>>
mysql 自动记录数据插入及最后修改时间
查看>>
c程序设计语言_习题1-9_将输入流复制到输出流,并将多个空格过滤成一个空格...
查看>>
ZT 80-90年代港台300部电视剧 你看过多少?
查看>>
C/C++关于全局变量和局部变量初始化与不初始化的区别
查看>>
题目1007:奥运排序问题
查看>>
爬虫实例——爬取1元夺宝用户头像(借助谷歌浏览器开发者工具)
查看>>
双目立体匹配经典算法之Semi-Global Matching(SGM)概述:匹配代价计算之Census变换(Census Transform,CT)...
查看>>
Docker关键概念阐述
查看>>
MMORPG服务器架构
查看>>
我们一起成长
查看>>
整合shiro出现的问题
查看>>
SSM配置中出现的错误-实时更新
查看>>
快速排序
查看>>