博客園客戶端UAP開發隨筆 -- 搭建App之間的橋樑

開發Windows Phone應用的同窗們應該都注意到了,Windows Phone 爲了安全性,對應用的限制仍是比較多的。我記得一位360的同窗很無奈的說:WP太安全了,咱們這些作WP上360衛士的基本上沒啥可作的。可是當WP360那個App出來後,仍是有不少用戶安裝了呢,儘管真的對安全沒什麼太大的幫助,可是對用戶瞭解本身的手機的使用狀況仍是有幫助的。其中一位用戶的評價是:從android到PC,我一直用360, 因此在WP上我也用。呵呵,粉絲啊!具體有什麼用其實他也不關心鐵粉而已。android

扯遠了!回到這篇隨筆的主題吧:咱們的應用只能訪問本身的文件夾以及有限的公用文件夾,而沒法進入別的應用的文件夾,這就是所謂的Sandbox。那麼咱們若是但願調用它們呢?那也仍是有方法的。git

今天咱們就來介紹下app間調用的2種主要方法:github

Protocol調用

簡單的說就是用Windows.System.launcher類,經過一個形如"mailto:ms-uap@outlook.com" 這樣由protocol前綴mailto,冒號,以及一個字符串組成的uri,調用註冊了protocol 前綴(這裏是mailto)的應用,將整個uri傳給它處理的過程。windows

好比這段代碼:安全

await Launcher.LaunchUriAsync(new Uri("mailto:ms-uap@outlook.com")); app

運行之後就會調起咱們的郵件應用給ms-uap@outlook.com這個郵件帳號發郵件:async

是否是很簡單?ide

固然,這只是調用了系統的應用。咱們也能夠調用註冊了相應protocol前綴的第三方應用,更能夠本身註冊一個protocol前綴來給別的應用調用哦。spa

那麼如何註冊呢?3d

雙擊咱們應用的Package.appxmanifest文件,在 聲明 面板中選擇協議,點擊添加:

通常狀況下只要在名稱上填寫咱們但願註冊的protocol前綴就能夠了。這個前綴最好是咱們的應用專用的,好比cnbloguap。另外在Windows和Windows Phone平臺上,protocol前綴是有些限制的。好比在Windows Phone上,即便咱們的應用註冊了 mailto 的protocol前綴,系統也依然會自動調用系統的郵件應用。詳細的狀況能夠參見https://msdn.microsoft.com/zh-CN/library/windows/apps/xaml/hh779670。註冊好protocol前綴以後咱們的應用就能夠被經過形如"cnbloguap:xxxx"的uri調用了。

那麼要如何處理調用咱們應用的uri呢?

這就須要咱們在App.xaml.cs中override "OnActivated" 這個方法了。代碼以下:

protected async override void OnActivated(IActivatedEventArgs args)

{

if(args.Kind == ActivationKind.Protocol)

{

ProtocolActivatedEventArgs protocolArgs = args as ProtocolActivatedEventArgs;

// TODO: Handle URI activation

// The received URI is eventArgs.Uri.AbsoluteUri

}

}

經過protocolArgs.Uri 就能夠取到完整的"cnbloguap:xxxx"的uri。接下來如何處理都是爲所欲爲啦。

這裏須要注意的是,最好加一下"OnLaunched"方法的啓動app部分的代碼,否則應用處理完uri就直接退出啦。能夠參考一下msdn上的例子:https://code.msdn.microsoft.com/windowsapps/Association-Launching-535d2cec/,在這個例子中將這部分代碼提取成了CreateRootFrame這個方法。

文件調用

若是咱們須要在應用間傳送的信息比較多的話,protocol調用就有些不方便了。那麼文件調用就能派上用場了。

好比有這樣一個場景,咱們經過應用下載了一首歌myFavorite.mp3,放在了music目錄,想馬上聽一聽。

那麼就能夠在咱們的代碼中加入下面的片斷:

var music = await KnownFolders.MusicLibrary.GetFileAsync("myFavorite.mp3");

await Launcher.LaunchFileAsync(music);

系統就會自動調用音樂播放器來播放這首歌啦。不過有一點須要注意的是當播放器播放過一次這首歌之後,咱們有段時間訪問這個MP3文件都會報錯T.T

同protocol調用同樣,咱們也能夠註冊本身的文件類型。

仍是在Package.appxmanifest文件中的 聲明 面板,選擇文件類型關聯,點擊添加:

填入名稱和文件類型,這樣系統在遇到.cnblogFile後綴的文件都會調用咱們的app來處理了。固然系統仍是有些保留後綴文件名的,參見https://msdn.microsoft.com/zh-CN/library/windows/apps/xaml/hh779669

固然咱們還須要獲得相應的文件,這就須要在App.xaml.cs中override "OnFileActivated" 這個方法了,代碼以下:

protected override void OnFileActivated(FileActivatedEventArgs args)

{

foreach(StorageFile argFile in args.Files)

{

//處理相應文件

}

}

這樣咱們就能夠從args的Files屬性中獲得傳給咱們的文件列表,接下來能夠按咱們的需求處理它們。OnFileActivated 方法中也應該添加 "OnLaunched"方法的啓動app部分的代碼。

在上面提到的例子https://code.msdn.microsoft.com/windowsapps/Association-Launching-535d2cec/ 中也能夠看到文件調用的使用。

不同的調用

LaunchFileAsync和LaunchUriAsync方法都有帶LauncherOptions的重載。能夠參見例子中的使用以及https://msdn.microsoft.com/zh-cn/library/windows/apps/windows.system.launcheroptions.aspx 的說明。

 

分享代碼,改變世界!

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

相關文章
相關標籤/搜索