博客園客戶端UAP開發隨筆 – 讓本身的App鏈接世界(2):WinRT中的內置分享

看到一篇眼前一亮的博文,是否是有一種但願其餘小夥伴都能看到的感受呢?有沒有一種「不轉不是程序員」的衝動呢?在 PC 瀏覽器上看到還好辦,直接網址複製,另外一邊 IM 上就發過去了,可是若是是 App 中的內容,就沒這麼方便了,總不能那邊 IM 上喊話:「隔壁老王,博客園上有篇叫‘博客園客戶端(Universal App)開發隨筆 – 爲應用插上分享的翅膀’的博文超好看,要不你也瞅瞅?」。隔壁老王再去搜索就太麻煩了。可能你會說了,嗨,直接分享不就完了麼。嗯,沒錯,就是分享功能。那麼如何把分享功能引入咱們的 App 中呢?往下看。git

 

Universal App 中 Windows / Windows Phone 之間分享的異同

既然是 Universal App,那天然是共享一套分享的代碼啦。可是在這兩個之間仍是有點不同的。區別在於,Windows 版因爲有 Charm Bar 這個系統級的菜單,而這菜單裏是自帶分享入口的,因此 Windows 版只須要提早準備好須要分享的內容,而不須要再提供另外的分享入口。而 Windows Phone 沒有這個入口,因此除了須要準備好內容,還須要經過菜單或按鈕的形式,顯式提供一個分享的入口。程序員

image

 

不過隨着 Windows 10 的發佈,Charm Bar 的壽命也走到了盡頭,在以前的 Technical Preview 中仍是偶爾能夠(誤觸)調出 Charm Bar 的,可是在剛剛發佈的 Costumer Preview,咱們應該就見不到 Charm Bar 的身影了,全部它提供的入口,都被移到了下圖所示的位置:github

image

 

這一點卻是不難理解,由於全部的 App 均可以窗口化了,右滑調出 Charm Bar 的方法已經很差用,因此單獨提供一個入口。不過不得不說,這個入口的尺寸不是很適合點擊,並且呼出的菜單更是容易誤觸,尤爲是在 Surface Pro 的高分屏上。這個改動,也使得原來上/下滑呼出 App Commands 的操做須要兩步才能完成,極爲繁瑣。咱們也所以不得不在新版的博客園中添加了 App Commands 的快捷入口。windows

另外,Windows 默認提供了兩種分享的方式,一是使用開發者提供的信息,二是直接分享當前屏幕截圖。而截至到目前的 Windows Phone Technical Preview 中,也是隻有一種分享方式的,沒有截屏的選項。在 Windows Phone 中,咱們還須要手動添加一個入口,以下圖所示。瀏覽器

  

建立分享(以 Text 舉例)

好了,咱們以博客園的博文分享舉例,來介紹一下如何建立一個分享。app

在動手以前,咱們要先在腦海裏想一下須要分享的內容。例如,博客園咱們須要分享以下格式的信息(分割線之內):函數

--------------post

標題:博文標題測試

做者:博文做者this

摘要:博文摘要

博文連接

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

思路是這樣的,咱們先建立一個字符串,包含以上信息,而後加入註冊到分享內容,最後顯式或系統調用出分享入口,進行分享。

具體實現以下:

首先添加引用:

using Windows.ApplicationModel.DataTransfer;

而後建立一個叫RegisterForShare的方法,將須要分享的內容註冊到分享區:

private void RegisterForShare()
        {
            DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
            dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.ShareTextHandler);
        }

在這個方法裏,咱們建立了一個 DataTransferManager,並讓他在 DataRequested 事件時出發 ShareTextHandler 方法:

private void ShareTextHandler(DataTransferManager sender, DataRequestedEventArgs e)
        {
                DataRequest request = e.Request;
                request.Data.Properties.Title = loader.GetString("ShareTitlePrefixText") + this.post.Title;
                request.Data.Properties.Description = this.post.Summary;
                string summaryText = (this.post.Author != null ? loader.GetString("ShareContentAuthor") + this.post.Author.Name : "") + "\n"
                    + loader.GetString("ShareContentSummary")               
                    + (this.post.Summary.Length > 50 ? this.post.Summary.Substring(0, 50) : this.post.Summary) + "\n"
                    + this.post.Link.Href;
            request.Data.SetText(summaryText);
        }

接下來實現這個方法,建立一個 request,並完善其中的內容,其中 request.Data.Properties.Title 是會顯示在分享的標題部分的內容,例如若是是郵件分享,那麼郵件標題就是 request.Data.Properties.Title,若是 Onenote 分享,那麼 note 的標題也會是 request.Data.Properties.Title。request.Data.Properties.Description 不是必選項,僅僅是個備註參考,不會在分享時顯示出來。最後的 request.Data.SetText(summaryText); 將其他須要分享的內容設置好。這樣,咱們的須要分享的內容就像以前想的同樣都已經填寫進去了。

接下來要作的,是先調用 RegisterForShare 方法,這個過程能夠在構造函數中完成。

 

分享入口

若是是 Windows,那麼在構造函數調用了 RegisterForShare 方法之後,就已經能夠直接分享了,入口就是以前提到過的 Charm Bar 或 菜單:

image

右邊的下拉菜單,能夠選擇分享內容或截屏:

image

咱們選擇郵件分享內容

image

就能夠發送了。

 

若是是 Windows Phone,那麼咱們還須要多作一步。

建立一個菜單的入口:

<AppBarButton x:Name="btn_Share"  x:Uid="ShareBlogButton" Label="分享博文" Click="btn_Share_Click" Icon="ReShare"/>

而後在點擊的方法中,顯式調用分享入口:

private void btn_Share_Click(object sender, RoutedEventArgs e)
        {
            Windows.ApplicationModel.DataTransfer.DataTransferManager.ShowShareUI();
        }

這樣,就會調出系統的分享入口:

image

因爲是模擬器測試,因此沒有 MS Account,所以沒有郵件分享的入口。

咱們選擇短信

image

 

就能夠發送分享內容了。

 

其餘分享格式

除了 SetText 來分享 text 格式的內容,咱們還能夠建立 HTML,WebLink 和 files 等內容。具體實現和 Text 大同小異,實現細節,能夠參考:

Text:https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh871372.aspx

WebLink: https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh973056.aspx

HTML:https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh973055.aspx

files:https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh871371.aspx

 

總結

經過以上的介紹,咱們能夠用很少的代碼實現將咱們喜歡的內容快速分享給他人的目的。咱們不再用擔憂隔壁老王看不到咱們給他們的分(sao)享(rao)了。

 

分享代碼,改變世界!

Windows Phone Store App link:

http://www.windowsphone.com/zh-cn/store/app/博客園-uap/500f08f0-5be8-4723-aff9-a397beee52fc

Windows Store App link:

http://apps.microsoft.com/windows/zh-cn/app/c76b99a0-9abd-4a4e-86f0-b29bfcc51059

GitHub open source link:

https://github.com/MS-UAP/cnblogs-UAP

MSDN Sample Code:

https://code.msdn.microsoft.com/CNBlogs-Client-Universal-477943ab

相關文章
相關標籤/搜索