Windows Phone 8.1 多媒体(3):音乐

简介: 原文:Windows Phone 8.1 多媒体(3):音乐Windows Phone 8.1 多媒体(1):相片 Windows Phone 8.1 多媒体(2):视频 Windows Phone 8.
原文: Windows Phone 8.1 多媒体(3):音乐

Windows Phone 8.1 多媒体(1):相片

Windows Phone 8.1 多媒体(2):视频

Windows Phone 8.1 多媒体(3):音乐

 


 

(1)前台

说是前台,其实音乐的播放都是利用系统后台的 BackgroundMediaPlayer:

BackgroundMediaPlayer.Current.SetUriSource(new Uri("ms-appx:///djlang59_-_Drops_of_H2O_(_The_Filtered_Water_Treatment_).mp3"));
BackgroundMediaPlayer.Current.Play();

可以添加音乐播放状态改变事件:

BackgroundMediaPlayer.Current.CurrentStateChanged += MediaPlayerStateChanged;

private async void MediaPlayerStateChanged(MediaPlayer sender, object args
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        switch( BackgroundMediaPlayer.Current.CurrentState )
        {
            case MediaPlayerState.Stopped:
                AppBarBtnPause.IsEnabled = false;
                AppBarBtnStop.IsEnabled = false;
                break;
            case MediaPlayerState.Playing:
                AppBarBtnPause.IsEnabled = true;
                AppBarBtnStop.IsEnabled = true;

                BackgroundMediaPlayer.SendMessageToBackground(new ValueSet
                {
                    {"Title", "Drops of H2O"},
                    {"Artist", "J.Lang"},
                });
                break;
            case MediaPlayerState.Paused:
                AppBarBtnPause.IsEnabled = false;
                break;
        }
    });
}

其中 BackgroundMediaPlayer.SendMessageToBackground 方法可以向后台音乐播放程序发送消息,可在后台程序中添加处理事件:

BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayerOnMessageReceivedFromForeground;

private void BackgroundMediaPlayerOnMessageReceivedFromForeground(object sender, MediaPlayerDataReceivedEventArgs e)
{
    systemmediatransportcontrol.DisplayUpdater.Type = MediaPlaybackType.Music;
    systemmediatransportcontrol.DisplayUpdater.MusicProperties.Title = e.Data["Title"].ToString();
    systemmediatransportcontrol.DisplayUpdater.MusicProperties.Artist = e.Data["Artist"].ToString();
    systemmediatransportcontrol.DisplayUpdater.Update();
}

 

(2)后台

这里说的后台是指 SystemMediaTransportControls,也就是按下音量键后顶部弹出的控制音乐播放的控件。

1)新建 Windows Runtime Component 和继承 IBackgroundTask 的后台类

A:Run 方法中可设置 SystemMediaTransportControls 的各个按键属性以及事件的订阅(比如下一曲按钮可不可用,状态更改事件等)

public void Run(IBackgroundTaskInstance taskInstance)
{
    systemmediatransportcontrol = SystemMediaTransportControls.GetForCurrentView();
    systemmediatransportcontrol.ButtonPressed += SystemControlsButtonPressed;
    systemmediatransportcontrol.IsEnabled = true;
    systemmediatransportcontrol.IsPauseEnabled = true;
    systemmediatransportcontrol.IsStopEnabled = true;
    systemmediatransportcontrol.IsPlayEnabled = true;

    BackgroundMediaPlayer.Current.CurrentStateChanged -= BackgroundMediaPlayerCurrentStateChanged;
    BackgroundMediaPlayer.MessageReceivedFromForeground -= BackgroundMediaPlayerOnMessageReceivedFromForeground;
    BackgroundMediaPlayer.Current.CurrentStateChanged += BackgroundMediaPlayerCurrentStateChanged;
    BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayerOnMessageReceivedFromForeground;

    deferral = taskInstance.GetDeferral();
}

B:事件的处理

private void BackgroundMediaPlayerCurrentStateChanged(MediaPlayer sender, object args)
{
    if (sender.CurrentState == MediaPlayerState.Playing)
    {
        systemmediatransportcontrol.PlaybackStatus = MediaPlaybackStatus.Playing;
    }
    else if (sender.CurrentState == MediaPlayerState.Paused)
    {
        systemmediatransportcontrol.PlaybackStatus = MediaPlaybackStatus.Paused;
    }
}

private static void SystemControlsButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)
{
    switch (args.Button)
    {
        case SystemMediaTransportControlsButton.Play:
            BackgroundMediaPlayer.Current.Play();
            break;
        case SystemMediaTransportControlsButton.Pause:
            BackgroundMediaPlayer.Current.Pause();
            break;
        case SystemMediaTransportControlsButton.Stop:
            BackgroundMediaPlayer.Current.Pause();
            BackgroundMediaPlayer.Current.Position = TimeSpan.FromSeconds(0);
            break;
    }
}

 

2)前台应用添加上一步新建的后台任务

目录
相关文章
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
2028 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
|
XML 开发框架 前端开发
Windows Phone快速入门需掌握哪些能力
在此之前,先普及下Windows Phone的概念和开发工具的介绍。 Windows Phone是微软公司开发的手机操作系统,它将微软旗下的Xbox Live游戏、Xbox Music音乐与独特的视频体验集成至手机中。2012年6月21日,微软正式发布Windows Phone 8,采用和Windows 8相同的Windows NT内核,同时也针对市场的Windows Phone 7.5发布Windows Phone 7.8。
396 0
Windows Phone快速入门需掌握哪些能力
|
移动开发 Android开发 开发者
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
在Build 2014大会上,微软正式发布了传闻已久的Windows Phone 8.1系统,所有的Windows Phone 8手机都可以升级,微软这次可谓是十分厚道。虽然并非迭代升级,但WP 8.1还是拥有很多重大更新,对于微软进一步完善移动平台拥有积极的意义。下面,就一起来了解一下WP 8.1的主要新特性。
452 0
Windows Phone 8.1 新功能汇总 开发者预览版开放下载
|
编解码 前端开发 JavaScript
Windows Phone 下开发 LBS 应用
基于位置的服务(Location Based Service,LBS),它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务。
465 0
|
6月前
|
安全 数据安全/隐私保护 虚拟化
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
1599 2
Windows Server 2022 中文版、英文版下载 (2025 年 10 月更新)
|
6月前
|
安全 Unix 物联网
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)
674 0
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 10 月更新)