启动器和选择器学习-----(6)Extras <wp7 7.1版本中的使用方法>
2012-06-08 18:49
495 查看
相信很多WP的用户都注意到了在我们的图片和音乐+视频中的主全景视图中的应用程序里发现很多第三方的程序在这个列表里,那就是Extras的实现。
Extras是一个为现有Windows Phone应用程序提供额外功能的应用程序。例如,如果您将应用程序注册为PhotosExtrasApplication,就可以在Photos应用程序中调用它来提供额外的功能。
下面我们就以图片的扩展(Pictures Extensibility)为例:
1、Pictures Hub:提供用户透过Pictures Hub中「apps pivot page」执行自己开发的Photo Application
2、Picture Viewer:提供用户可以在Picture Viewer中的「apps link」选择到自己的Photo Application,透过每一张图片的link URI与Token,将它们传递到自己的Application进行呈现
3、Share Picker:提供用户可以在Picture Viewer中的「share link」选择特定的图像分享到指定的Web Service;它与Pictue Viewer的作法相同,采用将图片的link URI与Token送到自己的Photo Application,并且将图片分享出去。
对图片的扩展有了了解以后,接下来说明要怎么使用这三个应用
1、在App的「WMAppManifest.xml」文件里,声明扩充。
Extensions标签中的每个属性定义如下
2、Picture Hub进行扩充应用:
需要在App的「WMAppManifest.xml」文件里,声明扩充就可以了。ExtensionName为Photos_Extra_Hub
3、Picture Viewer进行扩充应用:
需要在App的「WMAppManifest.xml」文件里,声明扩充就可以了。ExtensionName为Photos_Extra_Viewer。
注意:Picture Viewer会将图片的资讯变成一个参数:「token」透过Link URI将参数传入App之中,该token中的值则代表目前开启图片在MediaLibrary中的相关资讯,可以再将它放入App中的图片元件提供更丰富的操作。
因此,我们要覆写OnNavigateTo的事件,由于Photo Viewer将透过NavigateService的QueryString将token的资讯带入程式中。使用"token"为key。)
4、Picture Viewer中的share选项进行扩充应用:
需要在App的「WMAppManifest.xml」文件里,声明扩充就可以了。ExtensionName为Photos_Extra_Share。
Picture Viewer进行扩充应用中会向app「token」,而通过share…选择自己的App时,Picture Viewer会将图片的资讯变成一个参数:「FileId」通过Link URI将参数传入App之中
另外,如果当应用程式执行时,想知道目前进入应用程式是通过Photo Viewer进入或是来自应用程式清单(Start画面的清单),可以通过QueryString中的「Action」key来识别,如果存在且值为「ShareContent」代表是来自Photo Viewer。
源码下载:
http://files.cnblogs.com/qq278360339/PhoneAppa1.zip
Extras是一个为现有Windows Phone应用程序提供额外功能的应用程序。例如,如果您将应用程序注册为PhotosExtrasApplication,就可以在Photos应用程序中调用它来提供额外的功能。
下面我们就以图片的扩展(Pictures Extensibility)为例:
1、Pictures Hub:提供用户透过Pictures Hub中「apps pivot page」执行自己开发的Photo Application
2、Picture Viewer:提供用户可以在Picture Viewer中的「apps link」选择到自己的Photo Application,透过每一张图片的link URI与Token,将它们传递到自己的Application进行呈现
3、Share Picker:提供用户可以在Picture Viewer中的「share link」选择特定的图像分享到指定的Web Service;它与Pictue Viewer的作法相同,采用将图片的link URI与Token送到自己的Photo Application,并且将图片分享出去。
对图片的扩展有了了解以后,接下来说明要怎么使用这三个应用
1、在App的「WMAppManifest.xml」文件里,声明扩充。
..................... <Extensions> <Extension ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" ExtensionName="Photos_Extra_Hub" TaskID="_default" /> <Extension ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" ExtensionName="Photos_Extra_Viewer" TaskID="_default" /> <Extension ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" ExtensionName="Photos_Extra_Share" TaskID="_default" /> </Extensions> </App> </Deployment>
Extensions标签中的每个属性定义如下
属性名称 | 类型 | 说明 |
ConsumerID | GUID | 特定的Conumser识别值,做为与App Connect连结的识别; 所有图片扩充(Picture Extensions)使用相同的Value: 5B04B775-356B-4AA0-AAF8-6491FFEA5632. 所有搜寻扩充(Search Extensions)使用相同的Value: 5B04B775-356B-4AA0-AAF8-6491FFEA5661. |
ExtensionName | String | 做为识别值,用于指定Picture extension支援的类型。 其值可以为:Photos_Extra_Hub, Photos_Extra_Viewer, or Photos_Extra_Share。 |
TaskID | String | 如果有被定义特定的TaskID,当在在选择路由时会指定该TaskID; 如果没有设定,则采用_default; |
需要在App的「WMAppManifest.xml」文件里,声明扩充就可以了。ExtensionName为Photos_Extra_Hub
<Extensions> <Extension ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" ExtensionName="Photos_Extra_Hub" TaskID="_default" /> </Extensions>
3、Picture Viewer进行扩充应用:
需要在App的「WMAppManifest.xml」文件里,声明扩充就可以了。ExtensionName为Photos_Extra_Viewer。
注意:Picture Viewer会将图片的资讯变成一个参数:「token」透过Link URI将参数传入App之中,该token中的值则代表目前开启图片在MediaLibrary中的相关资讯,可以再将它放入App中的图片元件提供更丰富的操作。
因此,我们要覆写OnNavigateTo的事件,由于Photo Viewer将透过NavigateService的QueryString将token的资讯带入程式中。使用"token"为key。)
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { //Photo Viewer app... 使用"token"为key if (NavigationContext.QueryString.ContainsKey("token")) { //通过MediaLibrary获取token代表在Photo Hub中的代表的图片 MediaLibrary tLibrary = new MediaLibrary(); Picture tPicture = tLibrary.GetPictureFromToken(NavigationContext.QueryString["token"]); BitmapImage tBitmap = new BitmapImage(); tBitmap.CreateOptions = BitmapCreateOptions.None; tBitmap.SetSource(tPicture.GetImage()); WriteableBitmap picLibraryImage = new WriteableBitmap(tBitmap); GenerateMirrorImage(picLibraryImage);//图片翻转 } base.OnNavigatedTo(e); } private void GenerateMirrorImage(WriteableBitmap nWriteableBitmap) { nWriteableBitmap.Invalidate(); int pixelPosition = 0;//起始位置 int reversePosition = nWriteableBitmap.PixelWidth * nWriteableBitmap.PixelHeight;//结束位置 int pixlValue; //取高度的中心线为准,上下对换。 for (int i = 0; i < nWriteableBitmap.PixelHeight / 2; i++) { //取最后一行的第一个元素的下标 reversePosition -= nWriteableBitmap.PixelWidth; for (int j = 0; j < nWriteableBitmap.PixelWidth; j++) { pixlValue = nWriteableBitmap.Pixels[reversePosition]; nWriteableBitmap.Pixels[reversePosition] = nWriteableBitmap.Pixels[pixelPosition]; nWriteableBitmap.Pixels[pixelPosition] = pixlValue; pixelPosition++; reversePosition++; } //取倒数第二行的第一个元素的下标 reversePosition -= nWriteableBitmap.PixelWidth; } this.ImageDes.Source = nWriteableBitmap; }
4、Picture Viewer中的share选项进行扩充应用:
需要在App的「WMAppManifest.xml」文件里,声明扩充就可以了。ExtensionName为Photos_Extra_Share。
Picture Viewer进行扩充应用中会向app「token」,而通过share…选择自己的App时,Picture Viewer会将图片的资讯变成一个参数:「FileId」通过Link URI将参数传入App之中
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { if (NavigationContext.QueryString.ContainsKey("FileId")) { MediaLibrary tLibrary = new MediaLibrary(); Picture tPicture = tLibrary.GetPictureFromToken(NavigationContext.QueryString["FileId"]); BitmapImage tBitmap = new BitmapImage(); tBitmap.CreateOptions = BitmapCreateOptions.None; tBitmap.SetSource(tPicture.GetImage()); WriteableBitmap picLibraryImage = new WriteableBitmap(tBitmap); //Image控件 this.ImageDes.Source = picLibraryImage; if (NavigationContext.QueryString.ContainsKey("Action")) { string tAction = NavigationContext.QueryString["Action"]; Dispatcher.BeginInvoke(() => { MessageBox.Show(tAction); }); } } base.OnNavigatedTo(e); }
另外,如果当应用程式执行时,想知道目前进入应用程式是通过Photo Viewer进入或是来自应用程式清单(Start画面的清单),可以通过QueryString中的「Action」key来识别,如果存在且值为「ShareContent」代表是来自Photo Viewer。
源码下载:
http://files.cnblogs.com/qq278360339/PhoneAppa1.zip
相关文章推荐
- JSP 中使用<%@include%> 报 Duplicate local variable path 错误的解决方法
- Error:(95, 74) 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用; 对于 varargs 调用, 应使用 Class<?> 对于非 varar
- jQuery中,在<input>中使用时间控件,当输入时间后,立刻获得该值(针对于.bind("input propertychange", function(){})不起作用的解决方法)
- java基础学习总结四(控制语句<顺序、选择、循环>、方法)
- 【python爬虫专题】解析方法 <3> 正则表达式学习
- 我的Java开发学习之旅------>Java使用ObjectOutputStream和ObjectInputStream序列号对象报java.io.EOFException异常的解决方法
- dynamic_cast<>的使用方法
- jquery 中$.post获取MVC Controller中JsonResult返回包含LIst<Model>类型的子List<Model>的高级使用方法
- SpringMVC同时使用<mvc:resources … />和日期转换Formatter时出现问题的解决方法
- 《Effective C#》读书笔记——条目23:理解接口方法和虚方法的区别<使用C#表达设计>
- Maven使用第三方jar文件的两种方法<转>
- Git 学习笔记<本地版本库的管理> (二)
- JSONP一种使用<script>元素获取数据的方法
- 【工作日志】--关于Vue.js中<slot>的使用方法及注意事项
- <拦截方法> Objective-C使用Category
- 博为峰JavaEE技术文章 ——MyBatis <where>标签使用方法
- 在C#.NET中,关于<%%>使用方法
- java8中Collectors的使用方法举例和Function<T,R>简介
- C#委托的简单学习:定义委托和使用、Func<int f1,out r1>、给自定义的类或数组排序(冒泡排序)
- 启动器与选择器-常用Task【WP7学习札记之四】