Lens 翻译过来其实就是滤镜透镜的意思,在Windows phone 8 中使用快门按钮的时候可以启动相机功能,相机的AppBar 中可以看到一个Lens按钮。这是一种应用的全新体验的方式,我个人就很喜欢这种方式打开相机十分方便,并且在默认相机中就可以选择目标应用的滤镜效果 这样做十分有效的提升了用户体验,而这用户体验是Windows phone平台所特有的,也为更多的lens应用提供了更多的程序入口。

此文是 升级到WP8必需知道的13个特性 系列的一个更新 希望这个系列可以给 Windows Phone 8开发者带来一些开发上的便利。

同时欢迎大家在这里和我沟通交流或者在新浪微博上 @王博_Nick

下图是启动相机后 显示在AppBar中的Lins 按钮。

Windows Phone 8 镜头应用 - Lenses for Windows Phone 8_移动开发

下图是一个使用lens的应用的体验流程。

Windows Phone 8 镜头应用 - Lenses for Windows Phone 8_windows phone 8_02

首先如果你的应用是要进行拍摄以及保存照片到相册一定要在WMAppManifest中声明使用镜头和相册媒体库访问权限。

Windows Phone 8 镜头应用 - Lenses for Windows Phone 8_windows phone 8_03

另外并不是选了以上两个Item你的应用就可以显示在Lens picker中 需要你进行镜头的扩展注册 需要修改WMAppManifest文件但是这次是要进行打开编辑加入以下代码:

  1. <Extension ExtensionName="Camera_Capture_App"  
  2.            ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5631}" 
  3.            TaskID="_default" /> 

并且要紧跟在Token节点后

Windows Phone 8 镜头应用 - Lenses for Windows Phone 8_移动开发_04

这样在从新部署你的应用 在Lens picker中就可以看到你的应用了

Windows Phone 8 镜头应用 - Lenses for Windows Phone 8_windows phone 8_05

从上图可以看出来 只有我的DEMO程序没有图标显示看上去很不友好一定会被很多同学鄙视,当然我也是要设置一下默认选择其中的图标的,我们都知道WP8是支持3种分辨率的 所以在Lens picker中我们也需要三种的图标尺寸来适应着三种分辨率

Windows Phone 8 镜头应用 - Lenses for Windows Phone 8_windows phone 8_06

这里有一个详细的模板说明提供下载 包含PDF 和原始PSD文件非常友好啊:Icon templates for Windows Phone 8

你这里需要提供以上三种分辨率的图标并且使用命名规范,并且放在 Assets文件夹下  这样你就可以看到你的应用在不同分辨率下 Lens picker中的Icon 这里可以看到我偷懒就直接使用的SDK的图标但是 效果已经有啦~

这里我在啰嗦一句 如果你希望做出以下这种可以适应系统的颜色变化的效果 就用PNG透明图片即可。

Windows Phone 8 镜头应用 - Lenses for Windows Phone 8_移动开发_07


点击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 应用中去进行编辑

Windows Phone 8 镜头应用 - Lenses for Windows Phone 8_windows phone 8_08

从上图中可以看到这张图片是从一个LensAPP保存的并且可以使用该App打开这张图片 下面我介绍一下如何实现此功能

首先你的图片是通过你的LensAPP保存的,之后会就在相app bar 中的item中就会直接出现Open Link

  1. MediaLibrary library = new MediaLibrary(); 
  2.  
  3.                 string lName = GeneratePhotoName(); 
  4.  
  5.  
  6.                 var myStore = IsolatedStorageFile.GetUserStoreForApplication(); 
  7.  
  8.  
  9.                 if (myStore.FileExists(lName)) 
  10.                 { 
  11.                     MessageBox.Show("图片已经存在"); 
  12.                 } 
  13.                 else 
  14.                 { 
  15.                     Picture newPicture = this.mediaLibrary.SavePictureToCameraRoll(lName, e.ChosenPhoto); 
  16.  
  17.                     MessageBox.Show("保存成功!""提示", MessageBoxButton.OK); 

 

Windows Phone 8 镜头应用 - Lenses for Windows Phone 8_移动开发_09

 声明媒体拓展功能也需要在WMAppManifest 文件中注册声明

  1. <Extension ExtensionName="Photos_Rich_Media_Edit"  
  2.            ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}"  
  3.            TaskID="_default" /> 

同样也是需要在紧跟Token节点 在Extension中加入此节点

Windows Phone 8 镜头应用 - Lenses for Windows Phone 8_windows phone 8_10

从open link中拿到图片的方法 也很简单的 利用的就是应用间Share文件的方法,

  1. protected override void OnNavigatedTo(NavigationEventArgs e) 
  2.     // Get a dictionary of query string keys and values
  3.     IDictionary<string, string> queryStrings = this.NavigationContext.QueryString; 
  4.  
  5.     // Ensure that there is at least one key in the query string, and check whether the "token" key is present. 
  6.     if (queryStrings.ContainsKey("token")) 
  7.     { 
  8.         // Retrieve the photo from the media library using the token passed to the app. 
  9.         MediaLibrary library = new MediaLibrary(); 
  10.         Picture photoFromLibrary = library.GetPictureFromToken(queryStrings["token"]); 
  11.  
  12.         // Create a BitmapImage object and add set it as the p_w_picpath control source. 
  13.         // To retrieve a full-resolution p_w_picpath, use the GetImage() method instead
  14.         BitmapImage bitmapFromPhoto = new BitmapImage(); 
  15.         bitmapFromPhoto.SetSource(photoFromLibrary.GetPreviewImage()); 
  16.         p_w_picpath1.Source = bitmapFromPhoto; 
  17.  
  18.     } 

deep link的方法之前已经介绍过了相信大家已经不想再听我啰嗦了 再次给出参考连接吧

参考 windows phone 8 中的应用间通信

MSDN:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662942(v=vs.105).aspx

看到这里相信大家对Lens APP有了一定的了解赶快动手试试吧,欢迎大家在这里和我沟通交流或者在新浪微博上 @王博_Nick