为什么辅助磁贴的标识符无效?

时间:2012-11-17 19:15:35

标签: c# windows-8 live-tile

我正在尝试使用XML直接更新Windows 8辅助磁贴。但是,我不断得到一个例外,即我固定的磁贴的标识符无效。我甚至尝试直接从Windows中提取标识符,然后将其替换回CreateTileUpdaterForSecondaryTile,但我仍然得到相同的异常。这是我的代码:

public async static void UpdateSecondarySectionTile()
{
    string tileXmlString = "<tile id='SecondaryTile-7-0'>"
                         + "<visual>"
                         + "<binding template='TileWideImage'>"
                         + "<image id='1' src='" + imageSource + "' alt='alt text'/>"
                         + "</binding>"
                         + "</visual>"
                         + "</tile>";

    // create a DOM
    Windows.Data.Xml.Dom.XmlDocument tileDOM = new Windows.Data.Xml.Dom.XmlDocument();
    tileDOM.LoadXml(tileXmlString);

    System.Collections.Generic.IReadOnlyList<Windows.UI.StartScreen.SecondaryTile> tileList = await Windows.UI.StartScreen.SecondaryTile.FindAllAsync();

    foreach (var tile in tileList)
    {
        string tileId = tile.TileId;
        Windows.UI.Notifications.TileNotification tileUpdate = new Windows.UI.Notifications.TileNotification(tileDOM);
        try
        {
            Windows.UI.Notifications.TileUpdateManager.CreateTileUpdaterForSecondaryTile(tileId).Update(tileUpdate);
        }
        catch (Exception e)
        {
            System.Diagnostics.Debug.WriteLine("message: " + e.Message + ", inner exception: " + e.InnerException + " string: " + e.ToString());
        }
    }
}

调试行正在输出:

//message: The application identifier provided is invalid.
, inner exception:  string: System.Exception: The application identifier provided is invalid.

知道问题是什么吗? foreach循环只执行一次,因为我的构建中只有一个固定的辅助磁贴。 (另外我意识到UpdateSecondarySectionTile应该将tileId作为参数,并且每次调用只更新一个tile;这只是调试代码。)

我觉得有趣的是它抱怨应用程序标识符而不是 tile 标识符。另外,我知道如果你运行它们有时不能使用磁贴更新in the simulator,但即使在我的本地计算机上也遇到了这个问题。

1 个答案:

答案 0 :(得分:3)

如果辅助磁贴最初在模拟器中固定,则问题中引用的异常(“提供的应用程序标识符无效”)可以通过模拟器外部的CreateTileUpdaterForSecondaryTile方法抛出。要解决此问题,请取消固定辅助磁贴并在模拟器外部将其复制。

如问题作者所述,模拟器中不支持切片更新API(以及其他推送通知相关的API)。在这种情况下,辅助磁贴固定不会保留在模拟器外部。