在开始吹牛之前,先给大伙伴们拜个年,祝各位身体健康、生活愉快、[码]到功成。

-------------------------------------------------------------------------------

今年春节老周没有去玩,远的不愿去,近的都去过了,虽然外面的大太阳那么娇媚,但仍不知道去哪儿玩,干脆不玩了。只要知足常乐,天天都是过年,是吧。

今天老周就说一个比较不复杂的东东——共享目标,这玩意儿呢,其实与8.1的是一样的,也是,这个功能没必要改,所以SDK团队保留了8.1的API,不过,有个别地方要注意,某些API已被删除,或将来会删除,目的是简化代码。

所谓共享目标,就是让我们的应用程序支持接收其他应用程序发送的共享数据,即数据接收者。而应用程序支持接收哪些数据,则由开发者来配置,比如咱们的程序支持接收字符串的共享数据,当其他程序进行共享时,我们的应用就会出现在共享应用列表中,用户只要选中我们的程序,所共享的数据就会发送到我们的程序中。

在99.9998%的情形下,我们应该设计一个页面,专门用来接收或处理共享数据。这个处理界面用 Page 来定义较好,当然,你用任何UI元素都行,只要赋给Window.Content属性就行,不过,页面的妙处在于它在导航的过程中可以传递附加数据,这方便处理。故,用页面比较合理。

好,下面咱们来弄一个支持接收图像数据的共享目标,图像是以流的形式传递过来的,我们取出来的是表示图像的流。

首先,配置一下清单文件,请应用程序支持接收的数据的格式。切换到“声明”选项卡,添加一个共享目标,在右边的配置页在,找到“数据格式”,然后点下面的新建按钮,在文本框中填上支持的格式,每个格式都要独立填,有三种格式,你就新建三个项。

这里我只用一个Bitmap就可以了,数据格式的名字,可以参考清单设计器上的说明。

如果数据内容是文件,应该指定允许的文件类型,当然你可以选支持任何文件类型,但这样太不讲究,最好指定文件类型。

最后保存并关闭清单文件即可。

下面开始写代码,当我们的应用程序被激活时,其实会调用 Application 类的OnShareTargetActivated方法,并在方法参数中传入ShareOperation对象,通过它可以获取数据。

因此,在App类中应该重写OnShareTargetActivated方法。

  1. protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
  2. {
  3. // 获取 ShareOperation 对象
  4. var sharOp = args.ShareOperation;
  5. // 显示处理页面
  6. Frame root = Window.Current.Content as Frame;
  7. if (root == null)
  8. {
  9. root = new Frame();
  10. Window.Current.Content = root;
  11. }
  12. root.Navigate(typeof(RecSharPage), sharOp);
  13.  
  14. Window.Current.Activate();
  15. }

这里我的做法是:导航到一个RecSharPage页面来处理,并把 ShareOperation 对象作为附加参数传过去,再在页面上接收这个对象实例。

下面是处理页面的代码部分。

  1. ShareOperation shrOpration = null;
  2.  
  3. protected override async void OnNavigatedTo(NavigationEventArgs e)
  4. {
  5. shrOpration = e.Parameter as ShareOperation;
  6.  
  7. if (shrOpration == null)
  8. {
  9. return;
  10. }
  11.  
  12. // 获取数据
  13. if (shrOpration.Data.Contains(StandardDataFormats.Bitmap))
  14. {
  15. var bmpstream = await shrOpration.Data.GetBitmapAsync();
  16. BitmapImage bmp = new BitmapImage();
  17. bmp.SetSource(await bmpstream.OpenReadAsync());
  18. this.img.Source = bmp;
  19. }
  20. }

重写 OnNavigatedTo 方法,可以获取导航时传递的参数。

在取数据时,应该先检查一下数据包中是否包含你想要的数据格式,比如这样。

  1. if (shrOpration.Data.Contains(StandardDataFormats.Bitmap))
  2. {
  3. ……
  4. }

因为我现在要的是图像数据,所以先看看数据里面有没有图像数据,标准格式名字可以从 StandardDataFormats 类的静态属性中检索。

我这里就简单一些,只是在UI上显示收到的图像,不做额外处理。

重点来了,一定注意。在接收数据时,不需要调用ReportStarted、ReportDataRetrieved、ReportError这几个方法了,如果你调用它们,会发生异常,你直接接收数据就行了,现在已经简化了操作,这几个方法不必调用了。其实,你可以从它们的声明中看到信息的,如下图。

在处理完成时,你需要调用 ReportCompleted 方法,这个不能少,因为这个方法会告诉系统,你的程序已经处理完共享数据了,这时候共享面板会关闭。

我的示例是加了一个Button,单击button时就完成共享。

  1. private void OnClick(object sender, RoutedEventArgs e)
  2. {
  3. // 报告操作完成
  4. shrOpration?.ReportCompleted();
  5. }

下面可以开始测试了,首先得部署或者运行本例子,然后你运行一个可以共享图像的程序进行分享,我们的示例就会出现在候选列表中,点击就可以接收。

我之所以选择接收图像数据,是因为测试方便,你不用另外写一个程序去发送共享数据,因为系统有一个可以共享屏幕截图的功能。

运行程序后,在任意系统界面下,按快捷键 Win + H,然后就可以打开共享面板,并可以共享当前截屏。

然后,在这个列表下选择咱们的应用即可。

点击下面的 确定 按钮,完成接收。

通过上面讲述,你会发现,和8.1中使用共享目标是一样的,只是有几个API你注意不要去调用即可。

示例源代码下载

【Win 10 应用开发】共享目标(UWP)的更多相关文章

  1. 【Win 10应用开发】延迟共享

    延迟共享是啥呢,这么说吧,就是在应用程序打开共享面板选择共享目标时,不会设置要共享的数据,而是等到共享目标请求数据时,才会发送数据,而且,延迟操作可以在后台进行. 这样说似乎过于抽象,最好的诠释方法, ...

  2. 【Win 10 应用开发】启动远程设备上的应用

    这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...

  3. 【Win 10 应用开发】导入.pfx证书

    这个功能其实并不常用,一般开发较少涉及到证书,不过,简单了解一下还是有必要的. 先来说说制作测试证书的方法,这里老周讲两种方法,可以生成用于测试的.pfx文件. 产生证书,大家都知道有个makecer ...

  4. 【Win 10 应用开发】RTM版的UAP项目解剖

    Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...

  5. 【Win 10应用开发】认识一下UAP项目

    Windows 10 SDK预览版需要10030以上版本号的Win 10预览版系统才能使用.之前我安装的9926的系统,然后安装VS 2015 CTP 6,再装Win 10 SDK,但是在新建项目后, ...

  6. 【Win 10 应用开发】在代码中加载文本资源

    记得前一次,老周给大伙,不,小伙伴们介绍了如何填写 .resw 文件,并且在 XAML 中使用 x:Uid 标记来加载.也顺便给大伙儿分析了运行时是如何解析 .resw 文件的. 本来说好了,后续老周 ...

  7. 【Win 10 应用开发】InkToolBar——涂鸦如此简单

    从WPF开始,就有个InkCanvas控件,封装了数字墨迹处理相关的功能,Silverlight到Win 8 App,再到UWP应用,都有这个控件,所以,老周说了3688遍,凡是.net基础扎实者,必 ...

  8. 【Win 10应用开发】Adaptive磁贴模板的XML文档结构

    在若干天之前,老周给大家讲了Adaptive Toast通知的XML模板,所以相应地,今天老周给大家介绍一下Adaptive磁贴的新XML模板. 同样道理,你依旧可以使用8.1时候的磁贴模板,在win ...

  9. 【Win 10 应用开发】Toast通知激活应用——前台&后台

    老周最近热衷于讲故事,接下来还是讲故事时间. 有人问我:你上大学的时候,有加入过学生会吗?读大学有没有必要加入学生会? 哎哟,这怎么回答呢,从短期来说,加入学生会有点用,至少可以娱乐一下,运气好的话, ...

随机推荐

  1. ABP文档 - Hangfire 集成

    文档目录 本节内容: 简介 集成 Hangfire 面板授权 简介 Hangfire是一个综合的后台作业管理器,可以在ABP里集成它替代默认的后台作业管理器,你可以为Hangfire使用相同的后台作业 ...

  2. 异常处理汇总 ~ 修正果带着你的Net飞奔吧!

    经验库开源地址:https://github.com/dunitian/LoTDotNet 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983 ...

  3. webpack的使用

    1.webpack是什么? 打包前端项目的工具(为项目提高逼格的东西). 2.webpack的基本命令 webpack#最基本的启动webpack命令 webpack-w #提供watch方法,实时进 ...

  4. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  5. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  6. 高频交易算法研发心得--MACD指标算法及应用

    凤鸾宝帐景非常,尽是泥金巧样妆. 曲曲远山飞翠色:翩翩舞袖映霞裳. 梨花带雨争娇艳:芍药笼烟骋媚妆. 但得妖娆能举动,取回长乐侍君王. [摘自<封神演义>纣王在女娲宫上香时题的诗] 一首定 ...

  7. windows环境redis主从安装部署

    准备工作 下载windows环境redis,我下载的是2.4.5,解压,拷贝一主(master)两从(slaveof).主机端口使用6379,两从的端口分别为6380和6381, 我本地索性用6379 ...

  8. java常用的设计模式

    设计模式:一个程序员对设计模式的理解:"不懂"为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的"复杂"恰恰就是设计模式的精髓所 ...

  9. 【开源】专业K线绘制[K线主副图、趋势图、成交量、滚动、放大缩小、MACD、KDJ等)

    这是一个iOS项目雅黑深邃的K线的绘制. 实现功能包括K线主副图.趋势图.成交量.滚动.放大缩小.MACD.KDJ,长按显示辅助线等功能 预览图 最后的最后,这是项目的开源地址:https://git ...

  10. 在Ubuntu下搭建Spark群集

    在前一篇文章中,我们已经搭建好了Hadoop的群集,接下来,我们就是需要基于这个Hadoop群集,搭建Spark的群集.由于前面已经做了大量的工作,所以接下来搭建Spark会简单很多. 首先打开三个虚 ...