UWP开发:教你给App加上动态磁贴

UWP应用的一大特色就是动态磁贴,所以,你的应用如果还没有设置动态磁贴,那么,和我一起来为应用加上动态磁贴吧!

UWP动态磁贴可以通过消息推送实现,可以通过后台任务实现。我所用的方式,是通过注册后台任务的方式来实现。

方法:

使用后台任务更新动态磁贴:

其中,用到的API主要有如下两个。

第一步:创建后台任务项目:

要为应用启用动态磁贴,请向你的解决方案中添加一个新的 Windows 运行时组件项目。这是一个独立程序集,当用户安装你的应用时,OS 需要在后台加载并运行该程序集。

在解决方案资源管理器中,右键单击该解决方案,指向“添加”,然后单击或点击“新建项目”。

在“添加新项目”对话框的“Visual C#”>“Windows 应用商店”部分中,选择“Windows 运行时组件”模板。

命名 BackgroundTasks 项目,然后单击或点击“确定”。Microsoft Visual Studio 即会将这个新项目添加到该解决方案。

在主项目中,向 BackgroundTasks 项目添加一个引用。

如下图:

第二步:实现后台任务

实现IBackgroundTask接口,以创建用于更新应用的动态磁贴的类。后台工作将采用 Run 方法。

在解决方案资源管理器中,将自动生成的文件 Class1.cs 重命名为 BlogFeedBackgroundTask.cs。

在 BlogFeedBackgroundTask.cs 中,将自动生成的代码替换为BlogFeedBackgroundTask类的存根代码。

在 Run 方法的实现过程中,添加GetBlogFeed和UpdateTile方法的代码。

这里以请求在线XML文档为例,就以我们的RSS订阅为例,下面的方法,将会实现,把IT追梦园的新文章显示到动态磁贴上!想想不用打开App都知道我更新了些什么,是不是很酷?(好吧,虽然我还是想让你打开app看看的……)

这个运行时组件里面的代码如下:

using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Text;using System.Threading.Tasks;using Windows.ApplicationModel.Background;using Windows.Data.Xml.Dom;using Windows.UI.Notifications;using Windows.Web.Syndication;namespace BackgroundTasks{    public sealed class BlogFeedBackgroundTask  : IBackgroundTask    {//首先,我们处理一下获取IT追梦园的RSS订阅,返回XML文档的方法。前两个是设置一下网络请求头的信息。(可以忽略)static string customHeaderName = "User-Agent";          static string customHeaderValue = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2;          WOW64; Trident/6.0)";//这里是IT追梦园的RSS地址:static string feedUrl = @"http://www.zmy123.cn/?feed=rss2";//这里定义一个textElementName,用来在后面显示该节点请求到的数据static string textElementName = "text";//注意:这里是后台任务的开始,等我们写完代码,在这里打断点调试,看后台任务是否可以进行到这里!public async void Run( IBackgroundTaskInstance taskInstance )        {                      BackgroundTaskDeferral deferral = taskInstance.GetDeferral();            var feed = await GetBlogFeed();            UpdateTile( feed );            deferral.Complete();        }        private static async Task GetBlogFeed()        {            SyndicationFeed feed = null;            try            {//这里都是请求最XML地址的方法,并获取到XML文档。SyndicationClient client = new SyndicationClient();                client.BypassCacheOnRetrieve = true;                client.SetRequestHeader( customHeaderName, customHeaderValue );//这里我们获取到了XML文档 feedfeed = await client.RetrieveFeedAsync( new Uri( feedUrl ) );            }            catch( Exception ex )            {                Debug.WriteLine( ex.ToString() );            }            return feed;        }//更新磁贴的方法private static void UpdateTile( SyndicationFeed feed ){//通过这个方法,我们就可以为动态磁贴的添加做基础。var updater = TileUpdateManager.CreateTileUpdaterForApplication();//这里设置的是所以磁贴都可以为动态updater.EnableNotificationQueue( true );            updater.Clear();            int itemCount = 0;//然后这里是重点:记得分3步走:foreach( var item in feed.Items )            {//1:创建xml对象,这里看你想显示几种动态磁贴,如果想显示正方形和长方形的,那就分别设置一个动态磁贴类型即可。//下面这两个分别是矩形的动态磁贴,和方形的动态磁贴,具体样式,自己可以去微软官网查一查。我这里用到的是换行的文字形式。XmlDocument tileXml = TileUpdateManager.GetTemplateContent( TileTemplateType.TileWideText03 );               XmlDocument tilexml2 = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquareText04);                var title = item.Title;                string titleText = title.Text == null ? String.Empty : title.Text;//2.接着给这个xml对象赋值tileXml.GetElementsByTagName( textElementName )[0].InnerText = titleText;//3.然后用Update方法来更新这个磁贴updater.Update( new TileNotification( tileXml ) );//4.最后这里需要注意的是微软规定动态磁贴的队列数目小于5个,所以这里做出判断。if( itemCount++ > 5 ) break;            }        }          }}

第三步:设置包清单

打开它并添加一个新的后台任务声明。 将该任务的入口点设置为类名称,包括其命名空间。

在解决方案资源管理器中,打开 Package.appxmanifest。

单击或点击“声明”选项卡。

在“可用声明”下,选择“BackgroundTasks”,然后单击“添加”。Visual Studio 即会将“BackgroundTasks”添加到“支持的声明”下。

在“支持的任务类型”下,确保已选中“计时器”。

在“应用设置”下,将入口点设置为“BackgroundTasks.BlogFeedBackgroundTask”。

单击或点击“应用程序 UI”选项卡。

将“锁屏通知”设置为“锁屏提醒和磁贴文本”。

在“锁屏提醒徽标”字段中,设置一个 24x24 像素图标的路径。

这里也要注意一下,设置磁贴不要设置错了,设置完,记得删除原来的,要不然会报错。

如下图:

第四步:注册后台任务

到这里,我们就回到应用主页中:

在应用的主页中,添加RegisterBackgroundTask方法并在OnNavigatedTo事件处理程序中进行调用。

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Threading.Tasks;using Windows.ApplicationModel.Background;using Windows.Data.Xml.Dom;using Windows.Foundation;using Windows.Foundation.Collections;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Controls.Primitives;using Windows.UI.Xaml.Data;using Windows.UI.Xaml.Input;using Windows.UI.Xaml.Media;using Windows.UI.Xaml.Navigation;using Windows.Web.Syndication;// The Blank Page item template is documented at http://go.microsoft.com/fwlink/p/?LinkID=234238namespace ContosoApp{    ///     /// An empty page that can be used on its own or navigated to within a Frame.    ///     public sealed partial class MainPage : Page    {        public MainPage()        {            this.InitializeComponent();        }protected override void OnNavigatedTo( NavigationEventArgs e )        {//在这里注册我们那个运行时组件里的后台任务。this.RegisterBackgroundTask();        }        private async void RegisterBackgroundTask()        {//这里就是磁贴更新周期的一些逻辑处理var backgroundAccessStatus = await BackgroundExecutionManager.RequestAccessAsync();            if( backgroundAccessStatus == BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity ||                backgroundAccessStatus == BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity )            {                foreach( var task in BackgroundTaskRegistration.AllTasks )                {                    if( task.Value.Name == taskName )                    {                        task.Value.Unregister( true );                    }                }                BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();                taskBuilder.Name = taskName;                taskBuilder.TaskEntryPoint = taskEntryPoint;                taskBuilder.SetTrigger( new TimeTrigger( 15, false ) );                var registration = taskBuilder.Register();            }        }        private const string taskName = "BlogFeedBackgroundTask";        private const string taskEntryPoint = "BackgroundTasks.BlogFeedBackgroundTask";}}

第五步:调试后台任务

要调试后台任务,在该任务的 Run 方法中设置一个断点。 在“调试位置”工具栏中,选择你的后台任务。这将导致系统立即调用 Run 方法。

在该任务的 Run 方法中设置一个断点。

按 F5 或点击“调试”>“启动调试”以部署和运行该应用。

应用启动后,切换回 Visual Studio。

确保显示“调试位置”工具栏。该工具栏位于“查看”>“工具栏”菜单。

在“调试位置”工具栏上,单击“暂停”下拉菜单,然后选择“BlogFeedBackgroundTask”。

Visual Studio 会在断点位置暂停执行。

按 F5 点击“调试”>“继续”以继续运行该应用。

按 Shift+F5 或点击“调试”>“停止调试”以停止调试。

返回到“开始”屏幕上的该应用的磁贴。几秒钟后,你的应用的磁贴上将会显示磁贴通知了!

如下图:

注意:这里不能直接部署,要通过挂起BlogFeedBackgroundTask才能触发后台任务,所以如果你看不到动态磁贴,就注意一下上边最后一步里面的操作。我之前就是在这里疑惑了好久。这样,我们IT追梦园的APP上就能显示动态磁贴了,而且上面显示的都是我最近更新的内容, 是不是很酷?(好怕啊,这样你们会不会不打开我的APP了。。。)

好了,如果你也喜欢UWP开发,或者有什么问题,可以加入193148992,共同学习交流^_^。

android 动态仿磁贴,UWP开发:给App加上动态磁贴相关推荐

  1. 拼图android程序,可视化开发Android应用程序:拼图开发模式App Inventor

    可视化开发Android应用程序:拼图开发模式App Inventor 作 者:王向辉 等编著 出版时间:2013 内容简介 <可视化开发Android应用程序:拼图开发模式App Invent ...

  2. Android逆向工程:针对HTML5开发的App如何下手?这就带你上车!

    亲爱的小伙伴们大家好,春节已经过去了,想必小伙伴们在家玩的都很愉快吧~现在不知道大家是否已经告别了老家温暖的港湾再次投入到工作岗位中,博主反正是已经投入到岗位一星期了,不过还是有点不在状态~~新年新气 ...

  3. php微信支付参数动态配置,支付,微信开发_微信支付动态如何获取$jsApiParameters参数,支付,微信开发 - phpStudy...

    微信支付动态如何获取$jsApiParameters参数 现在我们在做一个需要动态变换价格的微信支付页面,就是用户购买商品后,跳转到支付页面,但是可以选择几个不同的价格当中一个进行支付. 当跳到这个页 ...

  4. [置顶] Android基于Bmob第三方后台开发的App——足说

    标签: androidGithubMD风格MVPbmob 2016-05-31 21:25  4565人阅读  评论(8)  收藏  举报   分类: Android(35)  版权声明:本文为博主原 ...

  5. Android基于Bmob第三方后台开发的App——足说

    重大声明: 2019-07-29:目前正在改版,准备自己写后端服务,不再使用bmob,第三方终究不靠谱 2019-06-13:由于bmob与其使用的图片上游服务商-又拍云停止合作,导致上传的图片都无法 ...

  6. Android项目仿驾校宝典的答题APP

    首先看到的是这款APP,它的外形如下图所示: 当我们第一次安装该软件时,第一次打开,进入的是导航页面,导航页面采用的是ViewPager+viewpagerindicator+Activity实现侧滑 ...

  7. android sdk build-tools_从零开始仿写一个抖音App——视频编辑SDK开发(一)

    本文首发于微信公众号--世界上有意思的事,搬运转载请注明出处,否则将追究版权责任.交流qq群:859640274. 大家好久不见,又有一个多月没有发文章了.不知道还有哪些读者记得我的 从零开始仿写抖音 ...

  8. 如何开发仿抖音短视频APP源码?

    如何开发仿抖音短视频APP源码? 流程列表 开发一个短视频最主要的流程分为 3 个,下面我将分步教你实现这 3 个流程下的各个功能点,功能点 API 可按需调用: 视频拍摄 a.启动拍摄 b.给拍摄添 ...

  9. Android 高仿74款APP

    Github搜索就有了 ---------------------------------------------------------------------------------------- ...

  10. Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

    安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...

最新文章

  1. 2014年秋广州华师在线计算机的作业答案,18秋华师《C语言程序设计B》在线作业-4辅导资料...
  2. linux下的c socket编程(4)--server端的继续研究
  3. 64位进程和32位进程通信问题,接收端收不到 SendMessage发送的消息
  4. python一百行代码多少钱_用86行Python代码模拟太阳系
  5. ArcGIS运行任务前台显示
  6. mdt 计算机名_MDT通过PowerShell脚本自定义变量(自定义计算机名)
  7. 蓝桥杯题库及答案python版_蓝桥杯试题库的历届真题版.doc
  8. Java对接微信支付预下单
  9. 怎么用计算机打出黑人,电脑上怎么打法文
  10. python学习之数据爬取及其可视化分析(一)
  11. 【Kernel】驱动开发学习之Platform平台总线模型
  12. Linux笔记——软件包管理
  13. contiki 学习笔记 leds实现部分
  14. 如何写作品的介绍文档
  15. 百度地图 Api v3.0 自定义信息窗体样式
  16. Qt对word文档操作总结
  17. audio codec简介
  18. 对图像处理中的面向对象和基于基元的理解
  19. c语言数据类型习题,C语言-数据类型习题及答案.doc
  20. 婚恋网站能遇见幸福吗?2019互联网婚恋交友行业洞察

热门文章

  1. 线段树入门(线段懵逼树、加了一些解释,丰富了一下内容)
  2. Hexo接入网易云评论
  3. 思科交换机接口配置trunk_思科交换机虚拟串口配置VLAN Trunk的步骤
  4. 安装office相关组件出现错误1310
  5. 一款好看的 html 后台管理系统模板
  6. 计算机中找计算器二进制转换咋找,计算器自带二进制转换器,你值得学习
  7. JSP传参 input隐藏域
  8. 电脑桌面计算机打开不显示硬盘信息,Win10电脑下移动硬盘不显示盘符如何解决...
  9. linux格式化硬盘 中断,linux格式化硬盘【调解方案】
  10. 深圳移动 神州行(大众卡/轻松卡/幸福卡)套餐资费(含香港日套餐)信息及使用方法...