当前位置:首页 > 操作系统 > Windows

Windows 通用应用尝试开发 “51单片机汇编”第二次更新总结

一、前言

  昨天更新了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>
技术分享
其中更新磁贴TileSetter.CreatTiles(code)方法代码如下:
                <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)!

相关教程推荐

其他课程推荐