Lens 翻译过来其实就是滤镜透镜的意思,在Windows phone 8 中使用快门按钮的时候可以启动相机功能,相机的AppBar 中可以看到一个Lens按钮。这是一种应用的全新体验的方式,我个人就很喜欢这种方式打开相机十分方便,并且在默认相机中就可以选择目标应用的滤镜效果 这样做十分有效的提升了用户体验,而这用户体验是Windows phone平台所特有的,也为更多的lens应用提供了更多的程序入口。
此文是 升级到WP8必需知道的13个特性 系列的一个更新 希望这个系列可以给 Windows Phone 8开发者带来一些开发上的便利。
同时欢迎大家在这里和我沟通交流或者在新浪微博上 @王博_Nick
下图是启动相机后 显示在AppBar中的Lins 按钮。
下图是一个使用lens的应用的体验流程。
首先如果你的应用是要进行拍摄以及保存照片到相册一定要在WMAppManifest中声明使用镜头和相册媒体库访问权限。
另外并不是选了以上两个Item你的应用就可以显示在Lens picker中 需要你进行镜头的扩展注册 需要修改WMAppManifest文件但是这次是要进行打开编辑加入以下代码:
- <Extension ExtensionName="Camera_Capture_App"
- ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5631}"
- TaskID="_default" />
并且要紧跟在Token节点后
这样在从新部署你的应用 在Lens picker中就可以看到你的应用了
从上图可以看出来 只有我的DEMO程序没有图标显示看上去很不友好一定会被很多同学鄙视,当然我也是要设置一下默认选择其中的图标的,我们都知道WP8是支持3种分辨率的 所以在Lens picker中我们也需要三种的图标尺寸来适应着三种分辨率
这里有一个详细的模板说明提供下载 包含PDF 和原始PSD文件非常友好啊:Icon templates for Windows Phone 8
你这里需要提供以上三种分辨率的图标并且使用命名规范,并且放在 Assets文件夹下 这样你就可以看到你的应用在不同分辨率下 Lens picker中的Icon 这里可以看到我偷懒就直接使用的SDK的图标但是 效果已经有啦~
这里我在啰嗦一句 如果你希望做出以下这种可以适应系统的颜色变化的效果 就用PNG透明图片即可。
点击Lens按钮后会出现支持Lens API的所有应用列表 点击列表中的某一个应用图标后会通过Deep Link的形式跳转(打开)至目标应用。处理这种Deep Link的方法请参考 windows phone 8 中的应用间通信 也可以参考MSDN :http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662936(v=vs.105).aspx
相信一般的提供滤镜的应用都提供了 图片编辑的功能,各种效果 特效过后让照片显示的光鲜靓丽,当然在照片库中可以使用一个入口连接将照片送入一个 lens 应用中去进行编辑
从上图中可以看到这张图片是从一个LensAPP保存的并且可以使用该App打开这张图片 下面我介绍一下如何实现此功能
首先你的图片是通过你的LensAPP保存的,之后会就在相app bar 中的item中就会直接出现Open Link
- MediaLibrary library = new MediaLibrary();
- string lName = GeneratePhotoName();
- var myStore = IsolatedStorageFile.GetUserStoreForApplication();
- if (myStore.FileExists(lName))
- {
- MessageBox.Show("图片已经存在");
- }
- else
- {
- Picture newPicture = this.mediaLibrary.SavePictureToCameraRoll(lName, e.ChosenPhoto);
- MessageBox.Show("保存成功!", "提示", MessageBoxButton.OK);
声明媒体拓展功能也需要在WMAppManifest 文件中注册声明
- <Extension ExtensionName="Photos_Rich_Media_Edit"
- ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}"
- TaskID="_default" />
同样也是需要在紧跟Token节点 在Extension中加入此节点
从open link中拿到图片的方法 也很简单的 利用的就是应用间Share文件的方法,
- protected override void OnNavigatedTo(NavigationEventArgs e)
- {
- // Get a dictionary of query string keys and values.
- IDictionary<string, string> queryStrings = this.NavigationContext.QueryString;
- // Ensure that there is at least one key in the query string, and check whether the "token" key is present.
- if (queryStrings.ContainsKey("token"))
- {
- // Retrieve the photo from the media library using the token passed to the app.
- MediaLibrary library = new MediaLibrary();
- Picture photoFromLibrary = library.GetPictureFromToken(queryStrings["token"]);
- // Create a BitmapImage object and add set it as the p_w_picpath control source.
- // To retrieve a full-resolution p_w_picpath, use the GetImage() method instead.
- BitmapImage bitmapFromPhoto = new BitmapImage();
- bitmapFromPhoto.SetSource(photoFromLibrary.GetPreviewImage());
- p_w_picpath1.Source = bitmapFromPhoto;
- }
- }
deep link的方法之前已经介绍过了相信大家已经不想再听我啰嗦了 再次给出参考连接吧
MSDN:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662942(v=vs.105).aspx
看到这里相信大家对Lens APP有了一定的了解赶快动手试试吧,欢迎大家在这里和我沟通交流或者在新浪微博上 @王博_Nick