一、前言
昨天更新了10天前上架到windows8.1平台和windowsphone平台的通用应用“51单片机汇编”,总要是添加了动态磁贴以及ListView的Groupstyle应用。下面主要主要复习下如何利用后台任务添加动态磁贴
二、动态磁贴
动态磁贴也是前几天才掌握的,基本内容可以查看我之前的有关动态磁贴博文。在这里我理顺在我的应用中,利用backgroudtask动态更新磁贴。
step1:首先先添加backgroutask组件。如图一、二
step2:
将backgroundtask引用到HubApp.windows及HubApp.windowsphone目录下,如下图:
step3:改写backgrountask下的HubAppBackgroundTask类(具体名字可以任改),这是重要的,因为后台实际执行的内容就是在这个类下编写如图
添加接口IBackgroundTask,实现接口代码如下:
<span>public</span>
<span>sealed</span>
<span>class</span>
<span> HubAppBackgroundTask:IBackgroundTask
{
</span>
<span>private</span>
<span>static</span>
<span>string</span> FILENAME = <span>"</span><span>CodeCopyFile.XML</span><span>"</span><span>;
</span><span>public</span><span>async</span><span>void</span><span> Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral </span>= taskInstance.GetDeferral();<span>//</span><span>必要的</span><span>try</span><span>//</span><span>具体后台执行代码</span><span> {
</span><span>var</span> code=<span>await</span> GetRandomCode();<span>//</span><span>磁贴的数据</span><span>if</span> (code!=<span>null</span><span>)
{
TileSetter.CreatTiles(code);</span><span>//</span><span>更新磁贴</span><span> }
}
</span><span>catch</span><span> (Exception)
{
</span><span>throw</span><span>;
}
</span><span>finally</span><span>
{
deferral.Complete();</span><span>//</span><span>必要的</span><span> }
}
}<br /></span>
<span>public</span>
<span>static</span>
<span>void</span>
<span> CreatTiles(CollectCode code)
{
</span>
<span>string</span> TileSquare150x150Image = <span>@"</span><span>ms-appx:///Assets/SmallLogo.scale-240.png</span><span>"</span><span>;
</span><span>string</span> TileSquare310x150Image = <span>@"</span><span>ms-appx:///Assets/WideLogo.scale-240.png</span><span>"</span><span>;
XmlDocument tileXML </span>= <span>new</span><span> XmlDocument();
</span><span>//////////////////////////////////////////////////////</span><span>//</span><span>//</span><span> Find all the available tile template formats at:
</span><span>//</span><span>http://msdn.microsoft.com/en-us/library/windows/apps/Hh761491.aspx</span><span>string</span> tileString = <span>"</span><span><tile></span><span>"</span> +
<span>"</span><span><visual version="2"></span><span>"</span> +
<span>"</span><span><binding template="TileSquare150x150PeekImageAndText03" fallback="TileSquarePeekImageAndText03"></span><span>"</span> +
<span>"</span><span><image id="1" src="</span><span>"</span> + TileSquare150x150Image + <span>"</span><span>" alt="alt text"/></span><span>"</span> +
<span>"</span><span><text id="1"></span><span>"</span> + code.Title + <span>"</span><span></text></span><span>"</span> +
<span>"</span><span><text id="2"></span><span>"</span> + code.Subtitle + <span>"</span><span></text></span><span>"</span> +
<span>"</span><span></binding></span><span>"</span> +
<span>"</span><span><binding template="TileWide310x150PeekImage01" fallback="TileWidePeekImage01"></span><span>"</span> +
<span>"</span><span><image id="1" src="</span><span>"</span> + TileSquare310x150Image + <span>"</span><span>" alt="alt text"/></span><span>"</span> +
<span>"</span><span><text id="1"></span><span>"</span> + code.Title + <span>"</span><span></text></span><span>"</span> +
<span>"</span><span><text id="2"></span><span>"</span> + code.Subtitle + <span>"</span><span></text></span><span>"</span> +
<span>"</span><span></binding></span><span>"</span> +
<span>"</span><span></visual></span><span>"</span> +
<span>"</span><span></tile></span><span>"</span><span>;
tileXML.LoadXml(tileString);
</span><span>//</span><span>新建磁贴通知</span>
TileNotification tile = <span>new</span><span> TileNotification(tileXML);
</span><span>//</span><span>更新磁贴通知</span>
TileUpdater updateTiler =<span> TileUpdateManager.CreateTileUpdaterForApplication();
updateTiler.EnableNotificationQueue(</span><span>false</span><span>);
updateTiler.Clear();
updateTiler.Update(tile);
}
}
...
</span><span>public</span><span>sealed</span><span>class</span><span> CollectCode
{
</span><span>public</span> CollectCode(String uniqueId, String title, String subtitle, <span>int</span><span> count)
{
</span><span>this</span>.UniqueId =<span> uniqueId;
</span><span>this</span>.Title =<span> title;
</span><span>this</span>.Subtitle =<span> subtitle;
</span><span>this</span>.Count =<span> count;
}
</span><span>public</span><span>string</span> UniqueId { <span>get</span>; <span>set</span><span>; }
</span><span>public</span><span>string</span> Title { <span>get</span>; <span>set</span><span>; }
</span><span>public</span><span>string</span> Subtitle { <span>get</span>; <span>set</span><span>; }
</span><span>public</span><span>int</span> Count { <span>get</span>; <span>set</span><span>; }
}</span>
至此backgroundtask已经全部准备好。
step3:在应用中注册相应的backgroundtask
首先要在Package.appxmanifest清单上声明后台任务,如下图:
然后再在应用上代码注册后台任务。在51单片机汇编上,我在App.xaml.cs注册后台任务,C#代码如下:
<span>protected</span>
<span>async</span>
<span>override</span>
<span>void</span>
<span> OnLaunched(LaunchActivatedEventArgs e)
{
...
</span>
<span>//</span>
<span> 确保当前窗口处于活动状态</span>
<span> Window.Current.Activate();
Init();
}
</span>
<span>private</span>
<span>async</span>
<span>void</span>
<span> Init()
{
</span>
<span>await</span>
<span> BackgroundTaskHelper.Register();
}
....
</span>
<span>public</span>
<span>sealed</span>
<span>class</span>
<span> BackgroundTaskHelper
{
</span>
<span>static</span>
<span>string</span> taskName = <span>"</span><span>BackgroundTask</span><span>"</span><span>;
</span><span>static</span><span>string</span> taskEntryPoint = <span>"</span><span>BackgroundTask.HubAppBackgroundTask</span><span>"</span><span>;
</span><span>public</span><span>static</span><span>async</span> Task<<span>bool</span>> Register(Action action = <span>null</span><span>)
{
</span><span>try</span><span>
{
UnRegister();
</span><span>//</span><span> do the registeration
</span><span>//</span><span> check access permission</span>
BackgroundAccessStatus status = <span>await</span><span> BackgroundExecutionManager.RequestAccessAsync();
</span><span>switch</span><span> (status)
{
</span><span>case</span> BackgroundAccessStatus.Denied: <span>//</span><span> reach maxmium number, or, disabled by user</span><span>return</span><span>false</span><span>;
</span><span>case</span><span> BackgroundAccessStatus.Unspecified:
</span><span>return</span><span>false</span><span>;
</span><span>case</span><span> BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity:
</span><span>break</span><span>;
}
</span><span>//</span><span> register the task in the next step.</span>
BackgroundTaskBuilder builder = <span>new</span><span> BackgroundTaskBuilder();
builder.Name </span>=<span> taskName;
builder.TaskEntryPoint </span>=<span> taskEntryPoint;
builder.SetTrigger(</span><span>new</span> TimeTrigger(<span>15</span>, <span>false</span>)); <span>//</span><span> run every 15 minutes</span><span>var</span> registration =<span> builder.Register();
</span><span>if</span> (registration != <span>null</span> && action != <span>null</span><span>)
{
registration.Completed </span>+= (s, a) =><span>
{
action();
};
}
</span><span>return</span><span>true</span><span>;
}
</span><span>catch</span><span>
{
</span><span>return</span><span>false</span><span>;
}
}
</span><span>public</span><span>static</span><span>bool</span><span> UnRegister()
{
</span><span>try</span><span>
{
BackgroundTaskRegistration task </span>= <span>null</span><span>;
</span><span>//</span><span> Check for existing registrations of this background task.</span><span>foreach</span> (<span>var</span> cur <span>in</span><span> BackgroundTaskRegistration.AllTasks)
{
</span><span>if</span> (cur.Value.Name ==<span> taskName)
{
</span><span>//</span><span> The task is already registered.</span>
task =<span> (BackgroundTaskRegistration)(cur.Value);
</span><span>break</span><span>;
}
}
</span><span>if</span> (task != <span>null</span><span>)
{
task.Unregister(</span><span>false</span><span>);
}
</span><span>return</span><span>true</span><span>;
}
</span><span>catch</span><span>
{
</span><span>return</span><span>false</span><span>;
}
}
}</span>
(这个注册后台任务代码,是借鉴博主@MS-UAP http://www.cnblogs.com/ms-uap/ 的应用的代码的-=-)
至此应用已经可以会在后台动态更新自己的磁贴了。
三、后话
昨天更新时登录上windows及windowsphone上的开发中心看了下51单片机汇编的下载情况,还蛮不错的有1000多了(对真正第一开发应用的我来说还是很爽),如图

没想到的是windows8.1会有700多下载,看来windows8.1平板用户比windowsphone用户还多哈。
明天又要下广州回学校了=-=大三下学期加油吧!大三再在空余时间开发个什么让自己学习下呢????
原文:http://www.cnblogs.com/NEIL-X/p/4305157.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!