Windows 通用应用尝试开发 “51单片机汇编”第二次更新总结
一、前言
昨天更新了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();//必要的
} }
}

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单片机汇编”第二次更新总结的更多相关文章
- Windows 通用应用尝试开发 “51单片机汇编”总结
一.前言 终于完成windows通用应用“51单片机汇编”,半年前开始玩WindowsPhone开发的第一个真正意义上的App(还很多缺点=_=).开发从1月中旬考完试到今天,期间实习了半个月,玩了几 ...
- codeblocks+SDCC开发51单片机
说到51,大部分人都是用的是KEIL开发环境,但是KEIL是商业软件,我们一般人都用的是破解版的,如果用于商业就会收到法律诉讼.然而有一款很好的编译器专为51内核而存在.SDCC最大的有点就是开源免费 ...
- 单片机成长之路(51基础篇) - 006 在Linux下搭建51单片机的开发烧写环境
在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了. 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDC ...
- windows phone 8.1开发:锁屏提醒
原文出自:http://www.bcmeng.com/lockscreen/ 之前小梦和大家分享了toast通知,磁铁更新,今天小梦和大家分享windows phone 8.1开发中的锁屏提醒.相比t ...
- [学习笔记]15个QA让你快速入门51单片机开发
一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ 22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...
- ESP8266 AT指令开发(基于STC89C52单片机): 测试下诱人的程序(51单片机,8266,MQTT远程通信控制)
前言 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, 简而言之: 51单片机+ESP8266用AT指令实现实现MQTT,(连接的本 ...
- 4-51单片机WIFI学习(开发板51单片机自动冷启动下载原理)
上一篇链接 http://www.cnblogs.com/yangfengwu/p/8743936.html 这一篇说一下自己板子的51单片机自动冷启动下载原理,我挥舞着键盘和鼠标,发誓要把世界写个明 ...
- 2-物联网开发标配方案(51单片机程序介绍+WIFI程序介绍)
上一节 https://www.cnblogs.com/yangfengwu/p/9944438.html 购买云服务器安装MQTT就不用说了,以前写过文章介绍 https://www.cnblog ...
- 2-51单片机ESP8266学习-AT指令(开发板51单片机自动冷启动下载原理)
前言:了解就行,不必深究 上一篇链接 http://www.cnblogs.com/yangfengwu/p/8720148.html 源码链接:https://pan.baidu.com/s/1wT ...
随机推荐
- easyui datagrid将表头的checkbox不显示(隐藏)
<script type="text/javascript"> $(function(){ $("#dg").datagrid({ url:&quo ...
- ELK修炼之道
看了ELK大半年了,现在就慢慢的总结一下对ELK的理解 参考资料 ELK stack中文指南 Elasticsearch权威指南 官方文档 Elasticsearch基础篇 此篇用于介绍Elastic ...
- s3c2440 移值u-boot-2016.03 第4篇 支持NAND flash 识别
1, /include/configs/smdk2440.h 中添加 #define CONFIG_CMD_NAND 编译 drivers/mtd/nand/built-in.o: In functi ...
- Linux VFS中write系统调用实现原理【转】
转自:http://blog.chinaunix.net/uid-28362602-id-3425881.html 目录 用户空间的write函数在内核里面的服务例程为sys_write Vfs_wr ...
- 34、JS/AJAX
1)回顾JS中核心内容 2)了解WEB1.0和WEB2.0时代的技术与特点 3)理解AJAX的产生背景.工作原理与特点 4)掌握AJAX常用API及应用 声明:服务端使用Servlet技术 一 ...
- mongodb 安装、开启服务 和 php添加mongodb扩展
1.下载mongodb:https://www.mongodb.org/downloads#production (https://www.mongodb.org/dl/win32) 2.安装.配置 ...
- EntityFramework Core 学习笔记 —— 创建模型
原文地址:https://docs.efproject.net/en/latest/modeling/index.html 前言: EntityFramework 使用一系列的约定来从我们的实体类细节 ...
- unity4.6学习Ugui中文文档-------参考-UGUI Rect Transform
1 . Rect Transform Rect Transform 是 2D 与 3D 图形的 Transform 组件对应.它用来指定用户界面系统中的大小. 位置和旋转的控件 Properties ...
- java方法参数
Java程序设计语言总是采用值调用.也就是说,方法得到的是所有参数的一个拷贝,特别是方法不能修改传递给它的任何参数变量的内容. 基本类型参数 1)X被初始化为percent值的一个拷贝: 2)X被乘以 ...
- WebSocket实战之————GatewayWorker使用笔记例子
参考文档:http://www.workerman.net/gatewaydoc/ 目录结构 ├── Applications // 这里是所有开发者应用项目 │ └── YourApp // 其中一 ...