博客园客户端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

相关文章
相关标签/搜索