エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone OS 7.1 アプリへの Windows Phone 8 および 7.8 のタイル機能の追加

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

Windows Phone 8 と Windows Phone 7.8 では、スタート画面を演出する新たなタイル サイズがサポートされるようになりました。Windows Phone OS 7.1 を対象とするアプリを維持しようと計画している場合、リフレクションを使用して新しいタイル機能を表示する Windows Phone 8 API および Windows Phone 7.8 API にアクセスできます。この方法で Windows Phone OS 7.1 アプリが Windows Phone 8 または Windows Phone 7.8 で実行される場合、ユーザーは新しいタイル機能にアクセスできます。

Windows Phone 7.8 向け Windows Phone SDK 更新プログラム では、Windows Phone 7.8 デバイスでアプリがどのように表示され、実行されるかを確認できるようにするため、Windows Phone SDK 8.0 および Windows Phone SDK 7.1 の両方を対象とした更新が用意されています。アプリにワイド タイル サポートを追加する場合に使用が推奨されるサポート SDK は Windows Phone SDK 8.0 のみです。

メモメモ:

Windows Phone SDK 7.1 ツールでアプリにワイド タイルを追加する場合、Windows Phone 8 用のアプリ マニフェスト ファイル の新しい <AppExtra> 要素が原因で、アプリをビルドする際にエラーが発生します。Windows Phone ストア でアプリを適切に公開するには、「Adding wide tiles to apps with the Windows Phone SDK 7.1 (Windows Phon SDK 7.1 を使用したアプリへのワイド タイルの追加)」で説明するサポートされていない回避策を使用できます。

Windows Phone 8 または Windows Phone 7.8 で実行される Windows Phone OS 7.1 アプリには、次のタイル機能があります。

Windows Phone 8 アプリと同じ方法で、Windows Phone OS 7.1 アプリ内の Windows Phone 8 タイルおよび Windows Phone 7.8 タイルを作成および更新します。違いが 1 つあり、最初に小、中、および (オプションで) ワイドの既定のタイルをローカル イメージで更新する必要があります。その次の更新では、通常どおりローカルまたはリモート イメージを使用できます。

Windows Phone OS 7.1 アプリで Windows Phone 8 および Windows Phone 7.8 のタイル機能を有効にするには、リフレクションを使用する必要があります。リフレクションとその使用方法の詳細については、「.NET Framework のリフレクション」を参照してください。

メモメモ:

ワイド タイルを有効にするか、スモール タイルにイメージを設定するには、ShellTile.Update メソッドとフリップ タイル テンプレートを使用して、アプリの既定のタイルを実行時に更新する必要があります。

アプリ マニフェスト ファイルの更新

  1. [ソリューション エクスプローラー] で [プロパティ] を展開し、WMAppManifest.xml を右クリックして [プログラムから開く] を選択し、次に [エンコード付きソース コード (テキスト) エディター] を選択します。

  2. <App> 要素の上に次の <AppExtra> 要素を追加します。

    <AppExtra xmlns="" AppPlatformVersion="8.0">
        <Extra Name="Tiles"/>
    </AppExtra>
    
    
メモメモ:

AppPlatformVersion="8.0" は Windows Phone 8 と Windows Phone 7.8 の両方に適用されます。

リフレクションを使用して Windows Phone 8 タイルまたは Windows Phone 7.8 タイルを更新するコードを追加する

OS バージョンに応じて、リフレクションを使用して Windows Phone 8 タイルまたは Windows Phone 7.8 タイルを更新するコードを追加します。

  1. クラス レベルで OS のバージョンを確認します。次に、Windows Phone 7.8 以降を確認する方法を示します。

    private static Version TargetedVersion = new Version(7, 10, 8858);
    public static bool IsTargetedVersion {get{return Environment.OSVersion.Version >= TargetedVersion;}}
    
    
  2. 上記の IsTargetedVersion 変数を使用して、使用する必要のあるタイル コードを決定します。この方法で、アプリは Windows Phone OS 7.1 だけでなく、Windows Phone 8 と Windows Phone 7.8 でも機能するようになります。

    次のコード例では、リフレクションを使用するフリップ タイルの更新に使用するメソッドを示しています。

    public static void UpdateFlipTile(
                string title, 
                string backTitle, 
                string backContent, 
                string wideBackContent, 
                int count, 
                Uri tileId, 
                Uri smallBackgroundImage, 
                Uri backgroundImage, 
                Uri backBackgroundImage, 
                Uri wideBackgroundImage, 
                Uri wideBackBackgroundImage)
    {
       if (IsTargetedVersion)
       {
          // Get the new FlipTileData type.
          Type flipTileDataType = Type.GetType("Microsoft.Phone.Shell.FlipTileData, Microsoft.Phone");
    
          // Get the ShellTile type so we can call the new version of "Update" that takes the new Tile templates.
          Type shellTileType = Type.GetType("Microsoft.Phone.Shell.ShellTile, Microsoft.Phone");
    
          // Loop through any existing Tiles that are pinned to Start.
          foreach (var tileToUpdate in ShellTile.ActiveTiles)
          {
             // Look for a match based on the Tile's NavigationUri (tileId).
             if (tileToUpdate.NavigationUri.ToString() == tileId.ToString())
             {
                // Get the constructor for the new FlipTileData class and assign it to our variable to hold the Tile properties.
                var UpdateTileData = flipTileDataType.GetConstructor(new Type[] { }).Invoke(null);
    
                // Set the properties. 
                SetProperty(UpdateTileData, "Title", title);
                SetProperty(UpdateTileData, "Count", count);
                SetProperty(UpdateTileData, "BackTitle", backTitle);
                SetProperty(UpdateTileData, "BackContent", backContent);
                SetProperty(UpdateTileData, "SmallBackgroundImage", smallBackgroundImage);
                SetProperty(UpdateTileData, "BackgroundImage", backgroundImage);
                SetProperty(UpdateTileData, "BackBackgroundImage", backBackgroundImage);
                SetProperty(UpdateTileData, "WideBackgroundImage", wideBackgroundImage);
                SetProperty(UpdateTileData, "WideBackBackgroundImage", wideBackBackgroundImage);
                SetProperty(UpdateTileData, "WideBackContent", wideBackContent);
    
                // Invoke the new version of ShellTile.Update.
                shellTileType.GetMethod("Update").Invoke(tileToUpdate, new Object[] { UpdateTileData });
                break;
             }
          }
       }
    
    }
    
    private static void SetProperty(object instance, string name, object value)
    {
       var setMethod = instance.GetType().GetProperty(name).GetSetMethod();
       setMethod.Invoke(instance, new object[] { value });
    }
    
    

表示:
© 2014 Microsoft