Windows Phone の [ミュージック+ビデオ] ハブと統合する方法
2013/03/11
対象: Windows Phone 8 | Windows Phone OS 7.1
Music + Videos ハブは、Windows Phone での音楽、ビデオ、ポッドキャストに関するすべての操作の中心です。Music + Videos ハブのアプリは、電話で音楽とビデオの統合エクスペリエンスを提供し、メディア再生のための一貫性のあるエンドユーザー エクスペリエンスを保証します。Music + Videos ハブと統合するアプリの例については、「Music + Videos ハブの例」を参照してください。
Music + Videos ハブにアプリとして表示するには、アプリが以下の条件を満たしている必要があります。
アプリは以下の一覧に示されている認定要件を満たしている必要があります。
アプリでは、MediaHistory クラスおよび MediaHistoryItem クラスを使用する必要があります。
アプリが Windows Phone デベロッパー センター での申請と認定のプロセスを完了すると、以下のことが行われます。
アプリの申請と認定のプロセスで、MediaHistory および MediaHistoryItem API を呼び出していることを検出し、これらの API を呼び出すために必要なセキュリティ機能をアプリに付与します。
認定プロセスでは、アプリの HubType も設定されます。その結果、アプリは、デバイスにインストールされた後、自動的に Music + Videos ハブのアプリ一覧に表示されるようになります。
Music + Videos ハブには 5 つのページがあります。
[コレクション] は、音楽、ビデオ、ポッドキャスト、および Store を起動する起点です。ページの下部にある [再生] ボタンを使用すると、すべての音楽コレクションがシャッフル モードで再生されます。
[履歴] には、最近再生した音楽、ビデオ、プレイリスト、アーティスト、ポッドキャスト、サードパーティ プロバイダーによるコンテンツが含まれています。Music + Videos ハブ アプリでメディアを再生したときは、この一覧を更新します。
[新着] には、電話に同期されたか、または XBox Music Store からダウンロードされた新しい音楽、ビデオ、またはポッドキャストの最新の一覧が含まれます。メディアがデバイスに追加されたとき、またはユーザーがアプリ内で "オブジェクト" を作成したとき (たとえば、音楽タグが作成された場合) には、この一覧を更新します。
[アプリ] には、デバイスにインストールされている Music + Videos ハブ アプリの一覧が含まれます。
[xbox] には、Xbox Companion および Xbox Music Store へのリンクが含まれています。
Music + Videos ハブ アプリが Music + Videos ハブと統合されるためには、Windows Phone のアプリ認定の要件に準拠している必要があります。デベロッパー センター の申請プロセスでは、Music + Videos ハブ API の使用が検出され、Windows Phone アプリ マニフェストを使用してアプリにアクセスすることが許可されます。
Music + Videos ハブに表示されるタイルは、アイコン画像に関する以下の追加の規則に従う必要があります。
アプリのタイトルまたはロゴを各タイルに含める必要があります。
[プレイ ビュー] タイルは、358 x 358 ピクセルでなければなりません。ファイルのサイズは 75 KB 以下であることが必要です。
他のタイルのサイズは、173 x 173 ピクセルである必要があります。
MediaHistoryItem クラスの Title プロパティは、ラジオ局名やビデオ タイトルなど、コンテンツを表すテキストに設定されている必要があります。
ユーザーが混乱するのを避けるために、ハブのタイルにアルバム アートを含めるのは、タイルを押すとそのアルバムが再生される場合に限定します。アプリがストリーム再生を行う場合、ハブ タイルのグラフィックは再生中のストリームを表すものでなければなりません。これは認定の要件ではありませんが、推奨される方法です。
アプリを Music + Videos ハブと統合するためには、デベロッパー センター でのアプリケーションの申請と認定のプロセスを通過する必要があるため、テストでは代替手段を使用します。Windows Phone 用のアプリ マニフェスト ファイルで、HubType の値が 1 に設定されていることを確認します。次のコード例で、HubType の値を設定する方法を示します。
<App xmlns="" ProductID="{00000000-0000-0000-0000-000000000000}" Title="WindowsPhoneApplication" RuntimeType="Silverlight" Version="1.0.0.0" Genre="NormalApp" Author="" Description="" Publisher="" PublisherID="" HubType="1">
次のコード例は、MediaHistory および MediaHistoryItem クラスを使用して [履歴] 一覧の [プレイビュー] タイルを更新する方法を示しています。
MediaHistoryItem mediaHistoryItem = new MediaHistoryItem(); //<hubTileImageStream> must be a valid ImageStream. mediaHistoryItem.ImageStream = <hubTileImageStream>; mediaHistoryItem.Source = ""; mediaHistoryItem.Title = "NowPlaying"; mediaHistoryItem.PlayerContext.Add("keyString", "Song Name"); MediaHistory.Instance.NowPlaying = mediaHistoryItem;
次のコード例は、MediaHistory および MediaHistoryItem クラスを使用して [履歴] 一覧にある [プレイビュー] タイル以外のタイルを更新する方法を示しています。
MediaHistoryItem mediaHistoryItem = new MediaHistoryItem(); //<hubTileImageStream> must be a valid ImageStream. mediaHistoryItem.ImageStream = <hubTileImageStream>; mediaHistoryItem.Source = ""; mediaHistoryItem.Title = "RecentPlay"; mediaHistoryItem.PlayerContext.Add("keyString", "Song Name"); MediaHistory.Instance.WriteRecentPlay(mediaHistoryItem);
次のコード例は、MediaHistory および MediaHistoryItem クラスを使用して [新着] 一覧を更新する方法を示しています。
MediaHistoryItem mediaHistoryItem = new MediaHistoryItem(); //<hubTileImageStream> must be a valid ImageStream. mediaHistoryItem.ImageStream = <hubTileImageStream>; mediaHistoryItem.Source = ""; mediaHistoryItem.Title = "MediaHistoryNew"; mediaHistoryItem.PlayerContext.Add("keyString", "Song Name"); MediaHistory.Instance.WriteAcquiredItem(mediaHistoryItem);
次のコード例は、アプリが [履歴] または [新着] 一覧の項目から起動されたかどうかを判断する方法を示しています。これは、OnNavigatedTo(NavigationEventArgs) イベント ハンドラーで実行されます。NavigationContext 内の情報を使用して、項目に関連付けられているメディアを特定します。この例では、項目はデバイス上のメディア ライブラリの楽曲です。曲の再生は、PhoneApplicationPage でページの読み込みが完了すると、Loaded イベント ハンドラー内で開始されます。詳細については、[ミュージック+ビデオ] ハブのサンプルを参照してください。
bool _historyItemLaunch = false; // Indicates whether the app was launched from a MediaHistoryItem. const String _playSongKey = "keyString"; // Key for MediaHistoryItem key-value pair. Song _playingSong = null; // The song to play. protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { MediaLibrary library = new MediaLibrary(); if (NavigationContext.QueryString.ContainsKey(_playSongKey)) { // We were launched from a history item. // Change _playingSong even if something was already playing // because the user directly chose a song history item. // Use the navigation context to find the song by name. String songToPlay = NavigationContext.QueryString[_playSongKey]; foreach (Song song in library.Songs) { if (0 == String.Compare(songToPlay, song.Name)) { _playingSong = song; break; } } // Set a flag to indicate that we were started from a // history item and that we should immediately start // playing the song after the UI has finished loading. _historyItemLaunch = true; } } private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { if (_historyItemLaunch) { // We were launched from a history item, start playing the song. if (_playingSong != null) { MediaPlayer.Play(_playingSong); } } }