部落格園用戶端UAP開發隨筆 -- 搭建App之間的橋樑

來源:互聯網
上載者:User

標籤:

開發Windows Phone應用的同學們應該都注意到了,Windows Phone 為了安全性,對應用的限制還是比較多的。我記得一位360的同學很無奈的說:WP太安全了,我們這些做WP上360衛士的基本上沒啥可做的。但是當WP360那個App出來後,還是有很多使用者安裝了呢,儘管真的對安全沒什麼太大的協助,但是對使用者瞭解自己的手機的使用方式還是有協助的。其中一位使用者的評價是:從android到PC,我一直用360, 所以在WP上我也用。呵呵,粉絲啊!具體有什麼用其實他也不關心鐵粉而已。

扯遠了!回到這篇隨筆的主題吧:我們的應用只能訪問自己的檔案夾以及有限的公用資料夾,而無法進入別的應用的檔案夾,這就是所謂的Sandbox。那麼我們如果希望調用它們呢?那也還是有方法的。

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

Protocol調用

簡單的說就是用Windows.System.launcher類,通過一個形如"mailto:[email protected]" 這樣由protocol首碼mailto,冒號,以及一個字串組成的uri,調用註冊了protocol 首碼(這裡是mailto)的應用,將整個uri傳給它處理的過程。

比如這段代碼:

await Launcher.LaunchUriAsync(new Uri("mailto:[email protected]"));

運行以後就會調起我們的郵件應用給[email protected]這個郵件帳號發郵件:

是不是很簡單?

當然,這隻是調用了系統的應用。我們也可以調用註冊了相應protocol首碼的第三方應用,更可以自己註冊一個protocol首碼來給別的應用調用哦。

那麼如何註冊呢?

雙擊我們應用的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

部落格園用戶端UAP開發隨筆 -- 搭建App之間的橋樑

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.