(1)LaunchUriAsync

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

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

(2)LaunchFileAsync

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

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

(3)App To App

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

A. Source:

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

private void shareTextButton_Click(object sender, RoutedEventArgs e)
{
DataTransferManager.GetForCurrentView().DataRequested += ShareText_DataRequested;
DataTransferManager.ShowShareUI();
} void ShareText_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
DataRequest request = args.Request;
request.Data.Properties.Title = "Text";
request.Data.Properties.Description = "You MUST set a Title! ";
request.Data.SetText("Some Texts. ");
}

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

当然也可以共享文件:

private void shareButton_Click(object sender, RoutedEventArgs e)
{
DataTransferManager.GetForCurrentView().DataRequested += ShareTextAndImage_DataRequested;
DataTransferManager.ShowShareUI();
} private async void ShareTextAndImage_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
var deferral = args.Request.GetDeferral(); var request = args.Request;
request.Data.Properties.Title = "Text and Image";
request.Data.Properties.Description = "You MUST set a Title! Async should get Deferral. "; request.Data.SetText(myTextBox.Text.Trim()); StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/SmallLogo.scale-240.png"));
request.Data.SetStorageItems(new List<StorageFile>() { file }); deferral.Complete();
}

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

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

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

B. Target

1)在 Manifest 中添加共享目标

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

2)App.xaml.cs 中重写 OnShareTargetActivated

protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
Frame rootFrame = Window.Current.Content as Frame; if( rootFrame == null )
{
rootFrame = new Frame();
Window.Current.Content = rootFrame;
} if( rootFrame.Content == null )
{
rootFrame.Navigate(typeof(MainPage), args.ShareOperation);
} Window.Current.Activate();
}

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

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
shareContent = e.Parameter as ShareOperation; myTextBlock.Text = await shareContent.Data.GetTextAsync(); var files = await shareContent.Data.GetStorageItemsAsync();
if( files != null && files.Count > )
{
BitmapImage image = new BitmapImage();
await image.SetSourceAsync(await (files[] as StorageFile).OpenAsync(FileAccessMode.Read));
myImage.Source = image;
}
} ShareOperation shareContent;

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

private void AppBarButton_Click(object sender, RoutedEventArgs e)
{
if( shareContent != null )
{
shareContent.ReportCompleted();
}
}

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---25桥模式

    桥接模式是一种既能把两个对象连接在一起,又能避免二者间的强耦合的方法.通过“桥”把彼此联系起来,同时又允许他们各自独立变化. 主要作用表现为将抽象与其实现隔离开来,以便二者独立化. <!DOCT ...

  2. 一个小的考试系统 android 思路

    一个小的考试系统 android 思路 假如有 100 组,每组有4个单选钮,设置超时检测确认后去测结果估分视图去切换,如果还有,就再显示下一组 所有结束就给个总结显示 有超时结束过程加上 提示正确选 ...

  3. 解决使用SecureCRT不能连接Ubuntu的问题

    一.现象 SecureCRT是远程登陆工具及串口,可以远程进行登陆Linux服务器或者串口打印数据.但我下载安装了之后想通过SecureCRT来远程登陆我的Ubuntu,出现一直连接不上. 二.问题原 ...

  4. C++编码优化之减少冗余拷贝或赋值

    临时变量 目前遇到的一些产生临时变量的情况:函数实参.函数返回值.隐式类型转换.多余的拷贝 1. 函数实参 这点应该比较容易理解,函数参数,如果是实参传递的话,函数体里的修改并不会影响调用时传入的参数 ...

  5. canvas.toDataURL() gives “Security Error” in IE 11

    http://stackoverflow.com/questions/30101143/canvas-todataurl-gives-security-error-in-ie-11

  6. iOS 友盟分享

    iOS 友盟分享 这个主要是提到怎样通过友盟去自己定义分享的步骤: 一.肯定要去友盟官网下载最新的SDK包,然后将SDK导入到你的project目录里面去. 二.注冊友盟账号.将你的APP加入到你的账 ...

  7. js进阶 14 jquery的ajax有哪些函数和事件(多练)

    js进阶 14 jquery的ajax有哪些函数和事件(多练) 一.总结 一句话总结:常用:load.ajax.post.get.getScript().getJSON().表单序列化,ajax事件这 ...

  8. subline Text3 安装及汉化

    因为自己的subline 有问题  所以决心重新改一下了. 三步: http://www.sublimetext.com/3      官网下载subline3 https://www.imjeff. ...

  9. tomcat的classloader机制

    本系列博客打算分析一下tomcat7.x的源码,其中可能会穿插一些java基础知识的介绍  读tomcat的源码的时候,我建议和官方的User Guide一起阅读,明白tomcat做某件事情的目的之后 ...

  10. jQuery的实现原理和核心

    1.jQuery的实现原理 1)jQuery采用的是构造函数模式进行开发的,jQuery是一个类 2)上面说的常用的方法(CSS.属性.筛选.事件.动画.文档处理)都是定义在jQuery.protot ...