共享數據包
DataPackage(數據包)是共享數據標准。
共享數據格式可以是多種的,包括文本、URI、HTML、圖像等,以及更多可擴展的格式。
我們可以通過以下方法設置需要的分享數據類型:
1) SetText():設置共享文本,例如:
可以實現效果:
2) SetUri():設置共享Uri;
3) SetHtmlFormat():設置共享Html;
4) SetBitmap():設置共享位圖,例如:
可以實現效果:
5) SetRtf():設置共享富文本;
6) SetData():設置共享數據;
7) SetStorageItems():設置共享文件或文件夾;
具體使用這些方法的示例代碼如下:
示例代碼地址:http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Source-App-d9bffd84
如何構建共享源
首先作為共享源應用需要考慮的事情有哪些呢?
1) 偵聽和處理要參與的共享事件;
2) 內容可以由兩種方式共享:隱式[用戶沒有選擇內容就選擇“共享”]和顯示[用戶在應用中選擇內容後選擇“共享”];
3) 構建Data Package(數據包)以獲得最佳結果;
那麼如何在自己應用程序中構建共享源呢?
第一步:
需要在應用想要共享數據的頁面代碼中注冊DataTransferManager類的DataRequested事件,該事件當用戶劃出Charms(超級按鈕),並選擇共享(Share Contract)時觸發。
第二步:
在OnDataRequested函數中,編寫應用程序要共享的數據包。
代碼中首先需要通過args.Request獲取到當前窗體請求共享對象,然後設置request對象的Data類的相關屬性,就可以進行共享文本、圖片等信息了。其中Data.Properties.Thumbnail可以設置數據包的縮略圖。
通過以上步驟,我們就可以實現數據的共享了,可以在共享面板中看到要共享的數據包信息了。效果如圖:
第三步:
共享完成之後,我們需要在當前操作頁面中將DataRequested事件注銷掉,以免耗費系統更多資源。
如何構建共享目標
通常情況下社交類、及時通訊類、雲端存儲類、打印設備類等應用適用成為共享目標應用。若我們應用程序接受來自其他應用提供的共享數據,那麼我們的應用程序就成為了共享目標程序。
應用程序成為共享目標,可以增加應用或服務的使用率,並使服務擁有與用戶相關的最新內容。
作為共享目標應用需要考慮哪些事情呢?
1) 注冊為共享目標,指定接受的格式;
2) 構建共享用戶界面,使其成為共享體驗的一部分,包括:[在應用中共享的人員或位置選擇]和[快速的輕量級體驗];
3) 使用DataPackage,提取最適合共享的數據;
4) 共享完成後,最好提示用戶共享成功,並且用戶最好能夠實現在共享的過程中看到共享進度或者取消共享的操作;
5) 返回一個Quicklink(快速鏈接),例如分享到的地方;
那麼我們如何構建共享目標呢?
第一步:
打開我們應用程序的應用清單文件,將應用程序聲明為Share Target,並設置能夠接受數據包中數據格式。
第二步:
App.xaml.cs文件中重寫OnShareTargetActivated方法,這樣就能接收到系統調用的請求。
OnShareTargetActivated方法中當應用作為共享目標激活時,導航到應用程序共享目標頁面(示例中導航到了MainPage頁面)。
第三步:
共享目標頁面中解析共享的數據包信息。
代碼中首先將e.Parameter強制轉換為ShareOperation類,然後通過shareOperation對象可以獲取到數據包的屬性,包含的文本、Uri、圖片等其他格式的信息。
返回QuickLink:
剛才我們提到了在獲取打包數據並處理之後,可以返回系統一個QuickLink,代碼可如下:
成功返回QuickLink之後,我們的應用就會作為常用目標出現在共享面板中了。
我們的目標應用也可以在獲取數據包數據的方法中通過shareOperation.QuickLinkId來判斷是否從QuickLink進入目標應用程序,從而根據不同的QuickLinkId做特別的處理。
DataTransferManager類
DataTransferManager類在實現Share Contract時扮演了非常重要的角色,那麼它包含哪些重要方法和事件呢?
1) DataRequested事件:共享操作開始時觸發;
2) TargetApplicationChosen事件:目標應用被選擇時觸發;
3) GetForCurrentView方法:獲取與當前窗體相關的DataTransferManager;
4) ShowShareUI方法:顯示共享面板;
本文出自 “王祖康” 博客,請務必保留此出處http://wzk89.blog.51cto.com/1660752/1017700