一、前言

  昨天更新了10天前上架到windows8.1平台和windowsphone平台的通用应用“51单片机汇编”,总要是添加了动态磁贴以及ListView的Groupstyle应用。下面主要主要复习下如何利用后台任务添加动态磁贴

二、动态磁贴

  动态磁贴也是前几天才掌握的,基本内容可以查看我之前的有关动态磁贴博文。在这里我理顺在我的应用中,利用backgroudtask动态更新磁贴。

step1:首先先添加backgroutask组件。如图一、二

step2:

将backgroundtask引用到HubApp.windows及HubApp.windowsphone目录下,如下图:

step3:改写backgrountask下的HubAppBackgroundTask类(具体名字可以任改),这是重要的,因为后台实际执行的内容就是在这个类下编写如图

添加接口IBackgroundTask,实现接口代码如下:

 public sealed class HubAppBackgroundTask:IBackgroundTask
{
private static string FILENAME = "CodeCopyFile.XML";
public async void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();//必要的
try//具体后台执行代码
{
var code=await GetRandomCode();//磁贴的数据
if (code!=null)
{
TileSetter.CreatTiles(code);//更新磁贴
}
}
catch (Exception)
{
throw;
}
finally
{
deferral.Complete();//必要的
} }
}
其中更新磁贴TileSetter.CreatTiles(code)方法代码如下:
public static void CreatTiles(CollectCode code)
{
string TileSquare150x150Image = @"ms-appx:///Assets/SmallLogo.scale-240.png";
string TileSquare310x150Image = @"ms-appx:///Assets/WideLogo.scale-240.png";
XmlDocument tileXML = new XmlDocument();
////////////////////////////////////////////////////////
// Find all the available tile template formats at:
// http://msdn.microsoft.com/en-us/library/windows/apps/Hh761491.aspx string tileString = "<tile>" +
"<visual version=\"2\">" +
"<binding template=\"TileSquare150x150PeekImageAndText03\" fallback=\"TileSquarePeekImageAndText03\">" +
"<image id=\"1\" src=\"" + TileSquare150x150Image + "\" alt=\"alt text\"/>" +
"<text id=\"1\">" + code.Title + "</text>" +
"<text id=\"2\">" + code.Subtitle + "</text>" +
"</binding>" +
"<binding template=\"TileWide310x150PeekImage01\" fallback=\"TileWidePeekImage01\">" +
"<image id=\"1\" src=\"" + TileSquare310x150Image + "\" alt=\"alt text\"/>" +
"<text id=\"1\">" + code.Title + "</text>" +
"<text id=\"2\">" + code.Subtitle + "</text>" +
"</binding>" +
"</visual>" +
"</tile>";
tileXML.LoadXml(tileString);
//新建磁贴通知
TileNotification tile = new TileNotification(tileXML);
//更新磁贴通知
TileUpdater updateTiler = TileUpdateManager.CreateTileUpdaterForApplication(); updateTiler.EnableNotificationQueue(false);
updateTiler.Clear();
updateTiler.Update(tile);
}
}
...
public sealed class CollectCode
{
public CollectCode(String uniqueId, String title, String subtitle, int count)
{
this.UniqueId = uniqueId;
this.Title = title;
this.Subtitle = subtitle;
this.Count = count;
}
public string UniqueId { get; set; }
public string Title { get; set; }
public string Subtitle { get; set; }
public int Count { get; set; }
}

至此backgroundtask已经全部准备好。

step3:在应用中注册相应的backgroundtask

首先要在Package.appxmanifest清单上声明后台任务,如下图:

然后再在应用上代码注册后台任务。在51单片机汇编上,我在App.xaml.cs注册后台任务,C#代码如下:

 protected async override void OnLaunched(LaunchActivatedEventArgs e)
{
...
// 确保当前窗口处于活动状态
Window.Current.Activate(); Init();
}
private async void Init()
{
await BackgroundTaskHelper.Register(); }
....
public sealed class BackgroundTaskHelper
{
static string taskName = "BackgroundTask";
static string taskEntryPoint = "BackgroundTask.HubAppBackgroundTask";
public static async Task<bool> Register(Action action = null)
{
try
{
UnRegister(); // do the registeration
// check access permission
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
switch (status)
{
case BackgroundAccessStatus.Denied: // reach maxmium number, or, disabled by user
return false;
case BackgroundAccessStatus.Unspecified:
return false;
case BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity:
break;
} // register the task in the next step.
BackgroundTaskBuilder builder = new BackgroundTaskBuilder();
builder.Name = taskName;
builder.TaskEntryPoint = taskEntryPoint;
builder.SetTrigger(new TimeTrigger(, false)); // run every 15 minutes var registration = builder.Register(); if (registration != null && action != null)
{
registration.Completed += (s, a) =>
{
action();
};
} return true;
}
catch
{
return false;
} } public static bool UnRegister()
{
try
{
BackgroundTaskRegistration task = null;
// Check for existing registrations of this background task.
foreach (var cur in BackgroundTaskRegistration.AllTasks)
{
if (cur.Value.Name == taskName)
{
// The task is already registered.
task = (BackgroundTaskRegistration)(cur.Value);
break;
}
} if (task != null)
{
task.Unregister(false);
} return true;
}
catch
{
return false;
}
}
}

(这个注册后台任务代码,是借鉴博主@MS-UAP http://www.cnblogs.com/ms-uap/ 的应用的代码的-=-)

至此应用已经可以会在后台动态更新自己的磁贴了。

三、后话

  昨天更新时登录上windows及windowsphone上的开发中心看了下51单片机汇编的下载情况,还蛮不错的有1000多了(对真正第一开发应用的我来说还是很爽),如图

没想到的是windows8.1会有700多下载,看来windows8.1平板用户比windowsphone用户还多哈。

明天又要下广州回学校了=-=大三下学期加油吧!大三再在空余时间开发个什么让自己学习下呢????

Windows 通用应用尝试开发 “51单片机汇编”第二次更新总结的更多相关文章

  1. Windows 通用应用尝试开发 “51单片机汇编”总结

    一.前言 终于完成windows通用应用“51单片机汇编”,半年前开始玩WindowsPhone开发的第一个真正意义上的App(还很多缺点=_=).开发从1月中旬考完试到今天,期间实习了半个月,玩了几 ...

  2. codeblocks+SDCC开发51单片机

    说到51,大部分人都是用的是KEIL开发环境,但是KEIL是商业软件,我们一般人都用的是破解版的,如果用于商业就会收到法律诉讼.然而有一款很好的编译器专为51内核而存在.SDCC最大的有点就是开源免费 ...

  3. 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境

    在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了. 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDC ...

  4. windows phone 8.1开发:锁屏提醒

    原文出自:http://www.bcmeng.com/lockscreen/ 之前小梦和大家分享了toast通知,磁铁更新,今天小梦和大家分享windows phone 8.1开发中的锁屏提醒.相比t ...

  5. [学习笔记]15个QA让你快速入门51单片机开发

    一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ  22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...

  6. ESP8266 AT指令开发(基于STC89C52单片机): 测试下诱人的程序(51单片机,8266,MQTT远程通信控制)

    前言 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, 简而言之: 51单片机+ESP8266用AT指令实现实现MQTT,(连接的本 ...

  7. 4-51单片机WIFI学习(开发板51单片机自动冷启动下载原理)

    上一篇链接 http://www.cnblogs.com/yangfengwu/p/8743936.html 这一篇说一下自己板子的51单片机自动冷启动下载原理,我挥舞着键盘和鼠标,发誓要把世界写个明 ...

  8. 2-物联网开发标配方案(51单片机程序介绍+WIFI程序介绍)

    上一节  https://www.cnblogs.com/yangfengwu/p/9944438.html 购买云服务器安装MQTT就不用说了,以前写过文章介绍 https://www.cnblog ...

  9. 2-51单片机ESP8266学习-AT指令(开发板51单片机自动冷启动下载原理)

    前言:了解就行,不必深究 上一篇链接 http://www.cnblogs.com/yangfengwu/p/8720148.html 源码链接:https://pan.baidu.com/s/1wT ...

随机推荐

  1. CentOS 7 防火墙和端口配置

    centos 7 防火墙和端口配置--解决 RHEL 7/ CentOS 7/Fedora 出现Unit iptables.service failed to load # 第一步,关闭firewal ...

  2. PHP中怎样创建一个空对象?

    如果没有声明一个对象然后就对其属性赋值会出现警告.那么我们给它创建一个空对象然后赋值就好了.PHP中创建一个空对象代码如下: 第一种方式: $empty_object = new stdClass() ...

  3. oracle和mysql获取当前时间的不同

    在oracle中:select sysdate from dual,而且必须加上from dual,否则报错,只支持sysdate ,和mysql不一样,mysql的是sysdate()函数: 在my ...

  4. 【转】VS2010中 C++创建DLL图解

    转载地址:http://blog.csdn.net/g710710/article/details/7255744 一.DLL的创建  创建项目: Win32->Win32项目,名称:MyDLL ...

  5. SQL Server 2008教程和Microsoft® SQL Server® 2008 R2 SP2 - Express Edition下载

    教程 SQL Server 2008 Tutorialhttp://www.quackit.com/sql_server/sql_server_2008/tutorial/ 数据库下载 Microso ...

  6. selenium高亮显示操作步骤方法

    package com.allin.pc;import java.util.List;import org.openqa.selenium.WebElement;import org.openqa.s ...

  7. 原创开源项目HierarchyViewer for iOS 2.1 Beta新功能介绍

    回顾 HierarchyViewer for iOS是我们发布的一个开源项目,采用GPL v3.0协议. HierarchyViewer for iOS可以帮助iOS应用的开发和测试人员,在没有源代码 ...

  8. 【Java】关于JVM运行时内存空间、JVM垃圾回收机制

    参考的优秀文章 <深入理解Java虚拟机 JVM高级特性与最佳实线>(机械工业出版社) Java虚拟机的堆.栈.堆栈如何去理解? 聊聊JVM的年轻代 前言 本文是<深入理解Java虚 ...

  9. Analyzer报表结果行

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  10. 《BI那点儿事》数据流转换——逆透视转换

    逆透视转换将来自单个记录中多个列的值扩展为单个列中具有同样值的多个记录,使得非规范的数据集成为较规范的版本.例如,每个客户在列出客户名的数据集中各占一行,在该行的各列中显示购买的产品和数量.逆透视转换 ...