(1)LaunchUriAsync

将简单数据包含在 Uri 中,然后发送到目标应用:

  1. await Launcher.LaunchUriAsync(new Uri("target:message"));

(2)LaunchFileAsync

直接用默认应用打开某文件:

  1. StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Text.txt"));
  2. await Launcher.LaunchFileAsync(file);

(3)App To App

也就是将 Source应用 的内容共享到 Target应用 当中去,共享的过程为:Soucre -> Shell -> Target -> Source,其中 Shell 为系统的选择 Target应用 的界面。

A. Source:

1)注册 DataRequested 事件并设置需要共享的 Data:

  1. private void shareTextButton_Click(object sender, RoutedEventArgs e)
  2. {
  3. DataTransferManager.GetForCurrentView().DataRequested += ShareText_DataRequested;
  4. DataTransferManager.ShowShareUI();
  5. }
  6.  
  7. void ShareText_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
  8. {
  9. DataRequest request = args.Request;
  10. request.Data.Properties.Title = "Text";
  11. request.Data.Properties.Description = "You MUST set a Title! ";
  12. request.Data.SetText("Some Texts. ");
  13. }

需要注意的是必须设置 Data 的 Title 属性,不然会共享失败。

当然也可以共享文件:

  1. private void shareButton_Click(object sender, RoutedEventArgs e)
  2. {
  3. DataTransferManager.GetForCurrentView().DataRequested += ShareTextAndImage_DataRequested;
  4. DataTransferManager.ShowShareUI();
  5. }
  6.  
  7. private async void ShareTextAndImage_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
  8. {
  9. var deferral = args.Request.GetDeferral();
  10.  
  11. var request = args.Request;
  12. request.Data.Properties.Title = "Text and Image";
  13. request.Data.Properties.Description = "You MUST set a Title! Async should get Deferral. ";
  14.  
  15. request.Data.SetText(myTextBox.Text.Trim());
  16.  
  17. StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/SmallLogo.scale-240.png"));
  18. request.Data.SetStorageItems(new List<StorageFile>() { file });
  19.  
  20. deferral.Complete();
  21. }

当事件中有异步方法是需要获取 Deferral,以保证异步事件的成功执行。

2)在离开页面时取消事件的注册

  1. private void NavigationHelper_SaveState(object sender, SaveStateEventArgs e)
  2. {
  3. DataTransferManager.GetForCurrentView().DataRequested -= ShareText_DataRequested;
  4. DataTransferManager.GetForCurrentView().DataRequested -= ShareTextAndImage_DataRequested;
  5. }

B. Target

1)在 Manifest 中添加共享目标

只有当有符合共享目标的数据格式或文件类型的共享内容时,Shell 的列表中才会出现该 Target应用。

2)App.xaml.cs 中重写 OnShareTargetActivated

  1. protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
  2. {
  3. Frame rootFrame = Window.Current.Content as Frame;
  4.  
  5. if( rootFrame == null )
  6. {
  7. rootFrame = new Frame();
  8. Window.Current.Content = rootFrame;
  9. }
  10.  
  11. if( rootFrame.Content == null )
  12. {
  13. rootFrame.Navigate(typeof(MainPage), args.ShareOperation);
  14. }
  15.  
  16. Window.Current.Activate();
  17. }

3)在 Page 的 OnNavigatedTo 方法中获取共享内容

  1. protected override async void OnNavigatedTo(NavigationEventArgs e)
  2. {
  3. shareContent = e.Parameter as ShareOperation;
  4.  
  5. myTextBlock.Text = await shareContent.Data.GetTextAsync();
  6.  
  7. var files = await shareContent.Data.GetStorageItemsAsync();
  8. if( files != null && files.Count > )
  9. {
  10. BitmapImage image = new BitmapImage();
  11. await image.SetSourceAsync(await (files[] as StorageFile).OpenAsync(FileAccessMode.Read));
  12. myImage.Source = image;
  13. }
  14. }
  15.  
  16. ShareOperation shareContent;

4)通过 ReportCompleted 方法回到 Source应用

  1. private void AppBarButton_Click(object sender, RoutedEventArgs e)
  2. {
  3. if( shareContent != null )
  4. {
  5. shareContent.ReportCompleted();
  6. }
  7. }

Windows Phone 8.1 应用间共享的更多相关文章

  1. windows核心编程之进程间共享数据

    有时候我们会遇到window进程间共享数据的需求,例如说我想知道系统当前有多少某个进程的实例. 我们能够在程序中定义一个全局变量.初始化为0.每当程序启动后就加1.当然我们我们能够借助第三方介质来储存 ...

  2. Windows系统中CreateFileMapping实现的共享内存及用法

    在32位的Windows系统中,每一个进程都有权访问他自己的4GB(232=4294967296)平面地址空间,没有段,没有选择符,没有near和far指针,没有near和far函数调用,也没有内存模 ...

  3. Windows进程间共享内存通信实例

    Windows进程间共享内存通信实例 抄抄补补整出来 采用内存映射文件实现WIN32进程间的通讯:Windows中的内存映射文件的机制为我们高效地操作文件提供了一种途径,它允许我们在WIN32进程中保 ...

  4. 利用Sambaserver在Ubuntu系统和Win7系统间共享目录

    1 介绍 如今是网络化的时代,我们每一个人要更好的发展.离不开网络化.信息化的支持.利用网络的支持.在不同的操作系统间共享文件等信息,是计算机专业学生必备的一项技能. 本文所讲的就是怎样建立.设置.链 ...

  5. windows下进程间通信与线程间通信

    进程间通信: 1.文件映射(Memory-Mapped Files) 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/ ...

  6. 使用DLL在进程间共享数据

    0x01 DLL在进程间共享数据理论 1.可以在Dll中使用#pragma data_seg建立共享类型的数据段将需要共享的数据分离出来,放置在一个独立的数据段里,并把该段的属性设置为共享,从而实现不 ...

  7. 【C++】DLL内共享数据区在进程间共享数据(重要)

    因项目需要,需要在DLL中共享数据,即DLL中某一变量只执行一次,在运行DLL中其他函数时该变量值不改变:刚开始想法理解错误,搜到了DLL进程间共享数据段,后面发现直接在DLL中定义全局变量就行,当时 ...

  8. 【VS开发】内存映射文件进程间共享内存

    内存映射文件进程间共享内存 内存映射文件的另一个功能是在进程间共享数据,它提供了不同进程共享内存的一个有效且简单的方法.后面的许多例子都要用到共享内存.共享内存主要是通过映射机制实现的.Windows ...

  9. 应用间共享数据方法(一)---sharepreferce

    SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数. SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/ ...

随机推荐

  1. js面向对象3-继承

    一.了解继承  首先我们一起了解下js中继承,其实继承就是后辈继承前辈的属性和方法. 二.继承的方法 从父类继承属性和方法 这是对象冒充的方法,模仿java的继承方法.实现的原理是,通过改变父类的执行 ...

  2. android插件式开发资料整理

    1.DL : Apk动态载入框架 2.android中的动态载入机制

  3. BZOJ 3732 Network Kruskal+倍增LCA

    题目大意:给定一个n个点m条边的无向连通图.k次询问两点之间全部路径中最长边的最小值 NOIP2013 货车运输.差点儿就是原题...仅仅只是最小边最大改成了最大边最小.. . 首先看到最大值最小第一 ...

  4. Python基础教程之第1章 基础知识

    #1.1 安装Python #1.1.1 Windows #1.1.2 Linux和UNIX #1.1.3 Macintosh #1.1.4 其它公布版 #1.1.5 时常关注.保持更新 #1.2 交 ...

  5. php函数,static,globalkeyword及三种变量作用域

    函数 和js函数相似,关注php与其它语言不用的地方 函数的形參默认值 形式: function f($a,$b=3,$vc = "abc"){ } 注意:没有给默认值的形參必须传 ...

  6. setting-在设置中添加新的选项

    如下图的“通知栏调出方式” 具体实现如下 1.在 res/xml/settings_headers.xml 文件中添加如下内容 <preference-headers xmlns:android ...

  7. error LNK2001: unresolved external symbol "public: virtual

    1) Mine solution : project-setting :static lib to shared dll .then ok. 找不到secondchar的定义, 你是否没有把包含sec ...

  8. the steps that may be taken to solve a feature selection problem:特征选择的步骤

    參考:JMLR的paper<an introduction to variable and feature selection> we summarize the steps that m ...

  9. Flask项目之手机端租房网站的实战开发(一)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一丶项目介绍 产品:关于手机移动端的租房网站 角色:在这个产品中用户包括房东与房客 功能:房东可以在这个平台发布自己的房屋,房客可 ...

  10. Loadrunner11--输入license后提示违反许可证安全,禁止操作

    安装中文补丁包后,重新把mlr5lprg.dll.lm70.dll覆盖LR11安装目录下“bin”文件夹下mlr5lprg.dll.lm70.dll.运行deletelicense.exe.重新用管理 ...