原文:UWP-动态磁贴

来自:IT追梦园 (http://www.zmy123.cn/?p=1172)

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

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

方法:

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

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

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

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

  1. 在解决方案资源管理器中,右键单击该解决方案,指向“添加”,然后单击或点击“新建项目”。
  2. 在“添加新项目”对话框的“Visual C#”>“Windows 应用商店”部分中,选择“Windows 运行时组件”模板。
  3. 命名 BackgroundTasks 项目,然后单击或点击“确定”。Microsoft Visual Studio 即会将这个新项目添加到该解决方案。
  4. 在主项目中,向 BackgroundTasks 项目添加一个引用。

如下图:

第二步:实现后台任务

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

  1. 在解决方案资源管理器中,将自动生成的文件 Class1.cs 重命名为 BlogFeedBackgroundTask.cs。
  2. 在 BlogFeedBackgroundTask.cs 中,将自动生成的代码替换为 BlogFeedBackgroundTask 类的存根代码。
  3. 在 Run 方法的实现过程中,添加 GetBlogFeed 和 UpdateTile 方法的代码。

这里以请求在线XML文档为例,就以我们 IT追梦园 的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";
//这里获取它节点为text的值
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<SyndicationFeed> GetBlogFeed()
{
SyndicationFeed feed = null; try
{
//这里都是请求最线XML地址的方法,并获取到XML文档。
SyndicationClient client = new SyndicationClient();
client.BypassCacheOnRetrieve = true;
client.SetRequestHeader( customHeaderName, customHeaderValue );
//这里我们获取到了XML文档 feed
feed = 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 = ; //然后这里是重点:记得分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 )[].InnerText = titleText; //3.然后用Update方法来更新这个磁贴
updater.Update( new TileNotification( tileXml ) ); //4.最后这里需要注意的是微软规定动态磁贴的队列数目小于5个,所以这里做出判断。
if( itemCount++ > ) break;
}
} }
}

第三步:设置包清单

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

  1. 在解决方案资源管理器中,打开 Package.appxmanifest。
  2. 单击或点击“声明”选项卡。
  3. 在“可用声明”下,选择“BackgroundTasks”,然后单击“添加”。Visual Studio 即会将“BackgroundTasks”添加到“支持的声明”下。
  4. 在“支持的任务类型”下,确保已选中“计时器”。
  5. 在“应用设置”下,将入口点设置为“BackgroundTasks.BlogFeedBackgroundTask”。
  6. 单击或点击“应用程序 UI”选项卡。
  7. 将“锁屏通知”设置为“锁屏提醒和磁贴文本”。
  8. 在“锁屏提醒徽标”字段中,设置一个 24×24 像素图标的路径。
    这里也要注意一下,设置磁贴不要设置错了,设置完,记得删除原来的,要不然会报错。

如下图:

第四步:注册后台任务

这里用到BackgroundTaskBuilder 以注册任务。

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

在应用的主页中,添加 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=234238 namespace ContosoApp
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
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( , false ) );
var registration = taskBuilder.Register();
}
} private const string taskName = "BlogFeedBackgroundTask";
private const string taskEntryPoint = "BackgroundTasks.BlogFeedBackgroundTask";
}
}

第五步:调试后台任务

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

  1. 在该任务的 Run 方法中设置一个断点。
  2. 按 F5 或点击“调试”>“启动调试”以部署和运行该应用。
  3. 应用启动后,切换回 Visual Studio。
  4. 确保显示“调试位置”工具栏。该工具栏位于“查看”>“工具栏”菜单。
  5. 在“调试位置”工具栏上,单击“暂停”下拉菜单,然后选择“BlogFeedBackgroundTask”。
  6. Visual Studio 会在断点位置暂停执行。
  7. 按 F5 点击“调试”>“继续”以继续运行该应用。
  8. 按 Shift+F5 或点击“调试”>“停止调试”以停止调试。
  9. 返回到“开始”屏幕上的该应用的磁贴。几秒钟后,你的应用的磁贴上将会显示磁贴通知了!

如下图:

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

来自:IT追梦园 (http://www.zmy123.cn/?p=1172)

UWP-动态磁贴的更多相关文章

  1. 【Win10 UWP】后台任务与动态磁贴

    动态磁贴(Live Tile)是WP系统的大亮点之一,一直以来受到广大用户的喜爱.这一讲主要研究如何在UWP应用里通过后台任务添加和使用动态磁贴功能. 从WP7到Win8,再到Win10 UWP,磁贴 ...

  2. win10 uwp 活动磁贴

    本文翻译:https://mobileprogrammerblog.wordpress.com/2015/12/23/live-tiles-and-notifications-in-universal ...

  3. WP8.1 Study18:动态磁贴

    一.前言 动态磁贴在WindowsPhone8.1和Windows8.1都是其特色,有人喜欢有人讨厌,不过我觉得还是挺好的,可以让使用者很快知道App内的内容和吸引使用者打开App.下面来学习下怎样添 ...

  4. Win8.1应用开发之动态磁贴

    using demo02.Common; using System; using System.Collections.Generic; using System.IO; using System.L ...

  5. wp8.1 创建动态磁贴应用

    目前Windows Phone 8.1所支持磁贴像素大小有71x71.150x150和310x150,分为大中小三种模式,对于桌面磁贴微软提供的诸多模板http://msdn.microsoft.co ...

  6. UWP Windows10开发更新磁贴和动态更新磁贴

    下面将介绍两种方式如何在windows10 uwp开发中如何更新应用磁贴: 实际上windows的磁贴就是用xml实现的,你只需要创建相应格式的xml就可以实现动态磁贴了 一,手动更新磁贴 二,轮询更 ...

  7. UWP 磁贴设置

    一:需求 一款好看好用的应用,对于UWP来说,动态的磁贴必不可少. 二:TileUpdateManager类 和TileUpdater类 如果需要更改或更新应用的磁贴,那么首先需要获得TileUpda ...

  8. UWP应用开发系列视频教程简介 - Built for Windows 10

    万分感谢Fdyo同学给我们带来的有中文字幕的系列教程! http://zhuanlan.zhihu.com/MSFaith/20364660 下面是这系列video教程中的一个截图作为示例,有代码,有 ...

  9. 想找个计算器当本命?来试试UWP应用《纸书科学计算器》

    久违了.上次在博客园发文还是4年前,正是高中参加NOIP的时候.这4年里发生了很多事,乃至再次看到过去的文章时,仿佛看到了自己也不熟悉的风景.最近很想把我的博客重新拾起来,慢慢灌溉,写一些微不足道的技 ...

随机推荐

  1. 【dotnet跨平台】Asp.net 正在经历的变革

     [dotnet跨平台]Asp.net 正在经历的变革 Asp.net 正在经历一场变革.从官网:https://get.asp.net/ 我们能够看到多个版本号的字眼例如以下: ASP.NET ...

  2. System and method for dynamically adjusting to CPU performance changes

    FIELD OF THE INVENTION The present invention is related to computing systems, and more particularly ...

  3. 小强的HTML5移动开发之路(23)—— jQuery Mobile入门

    一.下载jQuery Mobile 下载地址:http://jquerymobile.com/ 点击Download 下载如下zip包 下载成功后如下图 解压目录如图: 点击index.html进入d ...

  4. 【16.67%】【codeforces 667C】Reberland Linguistics

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. 利用WPF建立自己的3d gis软件(非axhost方式)(七)实现简单的粒子效果

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(七)实现简单的粒子效果 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew密 ...

  6. CSS拾遗(一)

    重新看<精通CSS(第二版)>做一些记录,方便今后巩固. 1.外边距叠加 只有普通文档流中块框的垂直外边距才会发生外边距叠加.行内框.浮动框.或绝对定位框之间的外边距不会叠加. 2.相对定 ...

  7. 通过javacv对视频每隔1秒钟截取1张图片

    Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org. ...

  8. shp数据和tab数据的两点区别

    作者:朱金灿 来源:http://blog.csdn.net/clever101 shp是ArcGIS的矢量格式,tab是Mapinfo的矢量格式.shp数据和tab数据有两点区别:一是shp数据的f ...

  9. Hibernate——(6)延迟加载机制

    一.延迟加载机制的基本原理 当访问实体对象时,并不是立即到数据库中查找.而是在真正要使用实体对象的时候,才去数据库查询数据. 具备这样功能的方法 session.load(...) query.ite ...

  10. gdal1.10编译经验

    作者:朱金灿 来源:http://blog.csdn.net/clever101 集成了一些扩展库,使用makefile编译,出现了一个链接错误: libcmt.lib(crt0.obj): erro ...