# win10 uwp App-to-app communication 應用通信
這篇文章都是亂說的,如果覺得有不好的,可以發我郵箱
本文主要講如何讓兩個應用之間傳輸消息,也就是我們經常用的分享。我們可以使用的有剪輯版、UWP分享、Uri啟動應用多個方式。

如果有個人看到一個網頁很好,于是就希望把這個網頁發送到郵件,那么這樣的話就是使用應用通信。
因為每個應用都是不能訪問其他應用數據,所以需要通信可以使用啟動內置應用,文件關聯應用。
<!--more-->
<div id="toc"></div>
## 發送數據
創建一個event 可以在用戶發送,共享發送
```csharp
DataTransferManager data_transfer_manager = DataTransferManager.GetForCurrentView();
data_transfer_manager.DataRequested += DataTransferManager_DataRequested;
```
當DataRequested,應用收到一個DataRequest,這個是DataPackage可以在里面寫你要發送的信息。DataPackage必須寫標題和數據,如果有描述也寫
```csharp
private static void DataTransferManager_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
DataRequest request = args.Request;
}
```
可以共享數據:
- 純文本
- url
- HTML
- 文本
- 圖片
- 文件
- 自己弄的我也不知道是什么的可以共享的
```csharp
//文本
request.Data.SetText(text);
//uri
//request.Data.SetUri(uri);過時
request.Data.SetWebLink(uri);
//html
request.Data.SetHtmlFormat(html);
request.Data.SetRtf(text);
//文件
request.Data.SetStorageItems(file);
//圖片
request.Data.SetBitmap(bitmap);
```
我們需要和用戶說我們在做的數據
```csharp
request.Data.Properties.Title = "標題";
request.Data.Properties.Description = "我的博客blog.csdn.net/lindexi_gd";
```

開始通信
```csharp
DataTransferManager.ShowShareUI();
```
有時候我們需要等待一些操作需要時間,不能馬上就分享,我們可以使用
```csharp
request.Data.Properties.Title = "標題";
request.Data.Properties.Description = "我的博客blog.csdn.net/lindexi_gd";
request.Data.SetDataProvider(StandardDataFormats.Bitmap, (data_provider_request) =>
{
DataProviderDeferral deferral = data_provider_request.GetDeferral();
//做時間比較長的操作
//一般可以把操作內容放try,因為操作內容主要是io,有出錯
//如果放在try,把deferral.Complete();finally
//try
//{
// //操作
//}
//finally
//{
// //deferral.Complete();
//}
deferral.Complete();
});
```
要接受其他的app我們需要設置`requestData.Properties.ContentSourceApplicationLink = ApplicationLink;`
ApplicationLink是`new Uri("ms-sdk-sharesourcecs:navigate?page=" + 頁面名);`
要接受其他的app我們需要設置


我們在說明寫:林德熙博客
但說明其實沒有什么用,主要是數據格式才是需要我們選擇,在上也看到我們可以分享的數據有多種格式,那么滿足格式的分享就會在分享看到我們的應用。

新建一個頁面接分享,因為我想不到這個叫什么,我就放在MainPage
導航到MainPage就是分享打開
頁面傳參數可以使用,`Frame frame.Navigate`(頁面,參數)
```csharp
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
```
在App.xaml.cs
```csharp
protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
Frame rootFrame = Window.Current.Content as Frame;
if (rootFrame == null)
{
rootFrame=new Frame();
Window.Current.Content = rootFrame;//http://blog.csdn.net/lindexi_gd
}
rootFrame.Navigate(typeof (MainPage), args.ShareOperation);
Window.Current.Activate();
}
```
我們可以在OnNavigatedTo拿分享
```csharp
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
ShareOperation share_operation = e.Parameter as ShareOperation;
if (share_operation == null)
{
return;
}
//標題
string shared_data_title = share_operation.Data.Properties.Title;
string shared_data_description = share_operation.Data.Properties.Description;
Uri url = share_operation.Data.Properties.ContentSourceWebLink;
Uri application_link = share_operation.Data.Properties.ContentSourceApplicationLink;
//圖像
RandomAccessStreamReference thumbnail = share_operation.Data.Properties.Thumbnail;
//應用名稱
string application_name = share_operation.Data.Properties.ApplicationName;
//數據
//判斷存在,如果不存在我們
if (share_operation.Data.Contains(StandardDataFormats.WebLink))
{
Uri web_link =await share_operation.Data.GetWebLinkAsync();
}
}
```
當我們做完可以告訴` share_operation.ReportCompleted();`
如果錯了可以告訴發送我們接受錯
分享成功經常返回一個鏈接,我們把一個東西分享到百度云,那么我們可以拿到一個鏈接百度云,可以發送,這個`QuickLink`
`QuickLink `·我們需要標題,圖標,id
```csharp
QuickLink quickLinkInfo = new QuickLink()
{
Id = QuickLinkId,
Title = QuickLinkTitle,
SupportedFileTypes = { "*" },
SupportedDataFormats =
{
StandardDataFormats.Text,
StandardDataFormats.WebLink,
StandardDataFormats.ApplicationLink,
StandardDataFormats.Bitmap,//http://blog.csdn.net/lindexi_gd
StandardDataFormats.StorageItems,
StandardDataFormats.Html
},
Thumbnail = thumbnail,
};
share_operation.ReportCompleted(quickLinkInfo);
```
## 文件啟動
我們需要關聯

在app.xaml.cs
```csharp
protected override void OnFileActivated(FileActivatedEventArgs args)
{
// args.Files
}
```
Files包含文件可以拿來
博客:http://blog.csdn.net/lindexi_gd
原文:https://msdn.microsoft.com/en-us/windows/uwp/app-to-app/index
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="知識共享許可協議" style="border-width:0" src="https://licensebuttons.net/l/by-nc-sa/4.0/88x31.png" /></a><br />本作品采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議</a>進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名[林德熙](http://blog.csdn.net/lindexi_gd)(包含鏈接:http://blog.csdn.net/lindexi_gd ),不得用于商業目的,基于本文修改后的作品務必以相同的許可發布。如有任何疑問,請與我[聯系](mailto:lindexi_gd@163.com)。
- Introduction
- 控件
- Win10 UWP Intro to controls and events
- win10 UWP Controls by function
- win10 uwp App-to-app communication 應用通信
- win10 UWP 使用MD5算法
- win10 UWP 全屏
- win10 uwp 使用油墨輸入
- 三種方式設置特定設備UWP XAML view
- win10 uwp iot
- win10 uwp 活動磁貼
- win 10 UWP 標簽
- Xamarin Forms 進度條控件
- win10 UWP MessageDialog 和 ContentDialog
- win10 uwp 俄羅斯方塊
- win10 UWP Hmac
- win10 UWP 單元測試
- win10 uwp 判斷文件存在
- win10 UWP 標題欄后退
- win10 uwp 分治法
- win10 UWP 應用設置
- win10 uwp BadgeLogo 顏色
- win10 uwp json
- win10 uwp Window.Current.Dispatcher中Current為null
- win10 uwp 無法附加到CoreCLR
- win10 uwp 自定義控件 SplitViewItem
- win10 uwp ContentDialog 點確定不關閉
- win10 uwp smms圖床
- win10 uwp 從StorageFile獲取文件大小
- win10 uwp 如何讓WebView標識win10手機
- win10 uwp 上傳Nuget
- win10 uwp 手動鎖Bitlocker
- win10 uwp 圓角按鈕
- win10 uwp 入門
- win10 uwp 切換主題
- win10 uwp 隨著數字變化顏色控件
- win10 uwp 設置啟動窗口大小 獲取窗口大小
- win10 uwp 簡單MasterDetail
- win10 uwp 異步進度條
- win10 uwp 訪問解決方案文件
- C# 7.0
- win10 uwp InkCanvas控件數據綁定
- win10 uwp 列表模板選擇器
- win10 uwp 隱藏實時可視化
- win10 uwp 讀取文本ASCII錯誤
- Visual studio 創建項目失敗vstemplate
- Visual Studio 自定義項目模板
- win10 uwp 車表盤 徑向規
- win10 uwp 截圖 獲取屏幕顯示界面保存圖片
- win10 uwp 獲得焦點改變
- win10 uwp 應用轉后臺清理內存
- win10 uwp 隱私聲明
- win10 uwp 打包第三方字體到應用
- win10 uwp 九幽圖床
- win10 uwp 興趣線
- win10 uwp 右擊浮出窗在點擊位置
- win10 uwp 保存用戶選擇文件夾
- win10 uwp 打電話
- visual studio 2015 warning MSB3246
- win10 uwp 繪圖 Line 控件使用
- win10 uwp 存放網絡圖片到本地
- win10 uwp 判斷本地ip
- win10 uwp 彈起鍵盤不隱藏界面元素
- win10 uwp Markdown
- C# 設計模式 責任鏈
- win10 uwp 顯示SVG
- win10 uwp 網絡編程
- win10 uwp HttpClient post錯誤
- win10 uwp win2d
- win10 uwp 布局
- win10 uwp 初始屏幕
- win10 uwp dataGrid
- win10 uwp 魔力鬼畜
- win10 uwp如何使用DataTemplate
- win10 uwp 多語言
- win10 uwp CSDN閱讀 源代碼
- win10 uwp 語音
- win10 uwp 動畫
- win10 uwp 顏色轉換
- win10 uwp 獲得Slider拖動結束的值
- Windows 10「設置」應用完整MS-Settings快捷方式匯總
- win10 uwp 用廣告賺錢
- win10 uwp 快捷鍵
- win10 UWP MvvmLight入門
- win10 uwp 標題欄
- win10 uwp 從Type 使用構造
- win10 uwp ImageSourece 和Byte[] 相互轉換
- win10 uwp 驗證TextBox
- C# 使用Emit深克隆