Windows Phone 8.1实时磁贴后台任务

时间:2014-05-09 22:02:51

标签: silverlight windows-runtime windows-phone live-tile windows-phone-8.1

我有一个Windows Phone 8应用程序,我最近升级到8.1 Silverlight。我想使用新的图块模板。现在我有一个使用ShellTile的ScheduledTaskAgent。

为了使用新的实时图块,我在WMAppManifest.xml中将通知服务更改为WNS。我删除了代码以注册旧的后台任务,并添加了此代码:

var backgroundAccessStatus = await BackgroundExecutionManager.RequestAccessAsync();
if (backgroundAccessStatus == BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity ||
    backgroundAccessStatus == BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity)
{
    foreach (var task in BackgroundTaskRegistration.AllTasks)
    {
        if (task.Value.Name == "LiveTileBackgroundTask")
        {
            task.Value.Unregister(true);
        }
    }

    BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
    taskBuilder.Name = "LiveTileBackgroundTask";
    taskBuilder.TaskEntryPoint = "BackgroundTasks.LiveTileBackgroundTask";
    taskBuilder.SetTrigger(new TimeTrigger(15, false));
    var registration = taskBuilder.Register();
}

我创建了一个名为BackgroundTasks的Windows Phone 8.1 Windows运行时组件,其中包含一个名为LiveTileBackgroundTask的BackgroundTask:

public sealed class LiveTileBackgroundTask : IBackgroundTask
{
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        BackgroundTaskDeferral deferral = taskInstance.GetDeferral();

        const string xml = "<tile>"
                           + "<visual>"
                           +  "<binding template='TileWideText01'>"
                           +   "<text id='1'>Text Field 1 (larger text)</text>"
                           +   "<text id='2'>Text Field 2</text>"
                           +   "<text id='3'>Text Field 3</text>"
                           +   "<text id='4'>Text Field 4</text>"
                           +   "<text id='5'>Text Field 5</text>"
                           +  "</binding>  "
                           + "</visual>"
                           +"</tile>";

        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xml);

        TileNotification tileNotification = new TileNotification(doc);
        TileUpdateManager.CreateTileUpdaterForApplication().Update(tileNotification);

        deferral.Complete();
    }
}

我在Windows Phone项目中添加了对此程序集的引用。

我还在Package.appxmanifest中添加了一个后台任务声明,其中BackgroundTasks.LiveTileBackgroundTask为入口点。我选择Timer和System事件作为支持的任务类型。

当我运行应用程序时,没有任何反应。没有实时图块。我完成了后台任务,一切顺利,没有任何例外。

2 个答案:

答案 0 :(得分:3)

你说“没有实时图块出现”。您发布的代码不会创建实时磁贴 - 它只会更新一个。您必须手动固定它 - 主要磁贴无法通过代码固定。

如果这不是问题,也许你不是在看宽幅?此模板适用于宽瓷砖,因此方形瓷砖不会更新。我建议使用NotificationsExtensions库。它最初用于Windows应用商店应用,但我认为它也适用于WP。 (我已经使用过了,但只是为了测试而不是真实的,所以可能存在问题。)它允许您轻松地为宽幅和方形瓷砖指定模板和参数。

最后,要拥有一个宽磁贴,您必须手动编辑Package.appxmanifest文件。您必须将Wide310x150Logo属性添加到DefaultTile元素。

这就是我所能想到的。希望它有所帮助。

答案 1 :(得分:1)

  

Silverlight 8.1不支持连续后台执行   应用

     

Windows Phone 8应用可以继续在后台运行   用户在某些条件下导航离开应用程序。这个   功能不适用于Silverlight 8.1应用程序。如果你需要这个   功能,您应该继续使用Windows Phone 8应用程序。更多   信息,请参阅后台运行位置跟踪应用   Windows Phone 8。

Platform compatibility and breaking changes for Windows Phone Silverlight 8.1 apps

Windows Phone 8.1 Windows运行时组件只能与Windows Phone 8.1运行时(存储)应用程序一起使用