2

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.

問題は何ですか?私のビルドには固定されたセカンダリ タイルが 1 つしかないため、foreach ループは 1 回だけ実行されます。(またUpdateSecondarySectionTile、タイル ID をパラメーターとして取り、呼び出しごとに 1 つのタイルのみを更新する必要があることも認識しています。これは単なるデバッグ コードです。)

タイル識別子ではなくアプリケーション識別子について不平を言っているのは興味深いことです。また、シミュレーターでタイルの更新を実行すると、タイルの更新が機能しないことがありますが、ローカル コンピューターでもこの問題が発生しています。

4

1 に答える 1

3

質問で参照されている例外 (「指定されたアプリケーション識別子が無効です」) はCreateTileUpdaterForSecondaryTile、シミュレーター内でセカンダリ タイルが最初に固定された場合、シミュレーターの外部のメソッドによってスローされる可能性があります。この問題を回避するには、セカンダリ タイルのピン留めを解除し、シミュレーターの外で再度ピン留めします。

質問の作成者が指摘したように、タイル更新 API (およびその他のプッシュ通知関連 API) はシミュレーターではサポートされていません。この場合、セカンダリ タイルのピン留めは、シミュレーターの外部では保持されませんでした。

于 2012-11-21T04:54:31.530 に答える