緒論:不一樣於windows, 在wp8.1中,若是不止一個程序能夠接受其Uri或者文件,shell會提供一個界面讓用戶選擇用哪一個程序。而在windows中,用戶能夠在設置那裏設置各類文件和Uri的默認程序。在wp8.1中,分享文件和數據過程如圖:php
1、Uri與file關聯shell
一、定製Uri關聯windows
咱們能夠利用Uri關聯,登陸其餘程序完成任務,如進入設備設置等,連接IE瀏覽器(http),郵箱(mailto),信息等,簡單例子以下:瀏覽器
例子一:app
private async void bt1_Click(object sender, RoutedEventArgs e) { await Launcher.LaunchUriAsync(new Uri("http://www.baidu.com")); }
例子二: async
await Launcher.LaunchUriAsync( new Uri("fb://profile/1234"), new LauncherOptions { FallbackUri = new Uri("http://facebook.com/profile.php?id=1234") } );//LauncherOptions是後備方案,當手機中沒有fb,就打開瀏覽器中的網頁。
二、文件關聯ide
通俗來講,文件關聯就是用其餘程序打開你程序中想打開的文件,如打開你程序中的pdf文件,例子以下:spa
var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata://Local/mydoc.pdf")); await Launcher.LaunchFileAsync(file);
注:本身也能夠製做相應的程序來handle文件或Uri,即讓你程序成爲Target,在這不詳細說明了。code
2、wp8.1中分享數據blog
在任何手機中分享數據是很常常的,如分享圖片到朋友圈等。wp8.1中,分享數據的體驗以下:
而分享數據的內部機制以下:
這可讓用戶在不一樣的程序之間中分享數據,同時許多app能夠成爲分享源,但只有一些能夠成爲分享目標。(下面只介紹對分享源操做)
一、對分享源操做
在你分享界面中,加入如下代碼:
protected override void OnNavigatedTo(NavigationEventArgs e) { navigationHelper.OnNavigatedTo(e); DataTransferManager.GetForCurrentView().DataRequested += OnShareDataRequested; } protected override void OnNavigatedFrom(NavigationEventArgs e) { navigationHelper.OnNavigatedFrom(e); DataTransferManager.GetForCurrentView().DataRequested -= OnShareDataRequested; } private void AppBarButton_Click(object sender, RoutedEventArgs e) { DataTransferManager.ShowShareUI(); }
而根據你分享的數據是什麼類型的,編寫相對應的OnShareDataRequested()方法。
好比分享簡單的文字:
void OnShareDataRequested(DataTransferManager sender, DataRequestedEventArgs args) { var request = args.Request; request.Data.Properties.Title = "Share example"; //You MUST set a Title! request.Data.Properties.Description = "This demonstrates how to share text to another app"; request.Data.SetText(TextToShare.Text.Trim()); }
好比分享圖片:
// Handle DataRequested event and provide DataPackage async void OnShareDataRequested(DataTransferManager sender, DataRequestedEventArgs args) { var dp = args.Request.Data; var deferral = args.Request.GetDeferral(); var photoFile = await StorageFile.GetFileFromApplicationUriAsync( new Uri("ms-appx:///Assets/needle.jpg")); dp.Properties.Title = "Space Needle"; dp.Properties.Description = "The Space Needle in Seattle, WA"; dp.SetStorageItems(new List<StorageFile> { photoFile }); dp.SetWebLink(new Uri("http://seattletimes.com/ABPub/2006/01/10/2002732410.jpg")); deferral.Complete(); }
set方法有不少類型,這裏只體現一些: