信息
您所需的主题如下所示。但此主题未包含在此库中。

如何与 Windows Phone 的音乐和视频中心集成

2012/2/9

“音乐 + 视频”中心是 Windows Phone 上所有音乐、视频和播客活动的焦点。“音乐 + 视频”中心的应用程序提供手机上的集成音乐和视频体验作为它的主要功能。可以使用 MediaHistoryMediaHistoryItem 类将这些应用程序与“音乐 + 视频”中心集成,帮助确保媒体播放的一致最终用户体验。有关与“音乐 + 视频”中心集成的应用程序示例,请参阅 Windows Phone 的代码示例主题中的“‘音乐 + 视频’中心示例”。

除了符合下面列出的应用程序认证要求之外,您的应用程序还必须使用被视为“音乐 + 视频”中心应用程序的 MediaHistory 类和 MediaHistoryItem 类。通过 Windows Phone 商城 中的应用程序提交和认证过程之后,您的应用程序将收到调用这些 API 所需的安全功能,并且您的应用程序将自动在“应用”列表中显示。

“音乐 + 视频”中心分为四个截然不同的列表:

  • Zune 是音乐、视频、播客、收音机以及 Zune 商城的启动点。“音乐”旁边的“播放”用于以随机模式播放整个音乐集合。

  • 历史记录包含最近播放的音乐、视频、播放列表、艺术家、播客、FM 收音机电台以及第三方提供商的内容。当“音乐 + 视频”中心应用程序播放媒体时更新此列表。

  • 最新上市包含已同步到手机或已从 Zune 商城下载的新音乐、视频或播客。当向设备添加媒体或用户在应用程序中创建“对象”(例如,创建了收音机电台或创建了音乐标记)时更新此列表。

  • 应用包含设备上安装的“音乐 + 视频”中心应用程序的列表。应用程序提交和认证过程将检测到您正在调用 MediaHistoryMediaHistoryItem API 并且将为您的应用程序设置 HubType。这将导致您的应用程序在安装到设备上之后显示在此列表中。

“音乐 + 视频”中心应用程序必须符合 Windows Phone 的应用程序认证要求才能与“音乐 + 视频”中心集成。Windows Phone 商城 提交过程检测“音乐 + 视频”中心 API 的使用并使用 Windows Phone 应用程序清单授予对该应用程序的访问权限。

在“音乐 + 视频”中心显示的磁贴必须符合附加的图标规则:

  1. 必须在每个磁贴上包含您的应用程序标题或磁贴。

  2. 现在正在播放磁贴大小必须为 358 像素 x 358 像素。文件大小必须为 75 KB 或更少。

  3. 其他磁贴大小必须为 173 像素 x 173 像素。

  4. MediaHistoryItem 类的 Title 属性必须设置为表示该内容的文本,如电台名称或视频标题。

为了帮助用户避免混淆,中心磁贴不应该包含专辑封面,除非按中心磁贴时播放该专辑封面。如果您的应用程序播放流,则中心磁贴图形应该描述正在播放的流。尽管这不是认证要求,但却是最佳做法。

因为在集成到“音乐 + 视频”中心之前,您的应用程序必须通过 Windows Phone 商城 中的应用程序提交和认证过程,出于测试的目的,您可以使用一种解决办法。在 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="" HubType="1">

注意

对于当前版本,不能在 Windows Phone 模拟器上测试“音乐 + 视频”中心集成。必须在物理手机设备上测试“音乐 + 视频”中心集成。

注意

如果您在使用 Zune 软件同步手机时尝试更新“音乐 + 视频”中心磁贴,则 API 将引发异常。

以下代码示例显示如何使用 MediaHistoryMediaHistoryItem 类更新“历史记录”列表的“现在正在播放”磁贴:

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;

以下代码示例显示如何使用 MediaHistoryMediaHistoryItem 类更新“历史记录”列表中除了“现在正在播放”磁贴之外的其他磁贴:

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);

以下代码示例显示如何使用 MediaHistoryMediaHistoryItem 类更新“最新上市”列表。

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 中的信息确定与项(在此示例中,为设备媒体库中的歌曲)关联的媒体。页面完成加载之后,歌曲开始在 PhoneApplicationPageLoaded 事件处理程序中播放。有关此内容的更多信息,请参阅“音乐 + 视频”中心示例

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);
        }
    }
}

显示:
© 2014 Microsoft