Почему идентификатор для вторичной плитки недействителен?

Я пытаюсь обновить вторичную плитку Windows 8 напрямую, используя XML. Тем не менее, я продолжаю получать исключение, что идентификатор для прикрепленной плитки неверен. Я даже попытался получить идентификатор непосредственно из 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 в качестве параметра и обновлять только одну плитку за вызов; это просто отладочный код.)

Мне интересно, что он жалуется на идентификатор приложения, а не на идентификатор плитки. Кроме того, я знаю, что обновления плиток иногда не работают, если вы запускаете их в симуляторе, но я сталкиваюсь с этой проблемой даже на моей локальной машине.

1 ответ

Решение

Исключение, указанное в вопросе ("Указанный идентификатор приложения недействителен"), может быть вызвано CreateTileUpdaterForSecondaryTile метод вне симулятора, если вторичная плитка изначально была закреплена в симуляторе. Чтобы обойти эту проблему, открепите вторичный тайл и закрепите его за пределами симулятора.

Как отметил автор вопроса, API-интерфейсы обновления тайлов (и другие API, связанные с push-уведомлениями) не поддерживаются в симуляторе. В этом случае вторичное закрепление тайлов не сохранялось за пределами симулятора.

Другие вопросы по тегам