六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 292|回复: 0

Windows Phone实用开发技巧(37):创建一个全局播放器

[复制链接]

升级  20%

24

主题

24

主题

24

主题

秀才

Rank: 2

积分
80
 楼主| 发表于 2012-12-22 02:43:35 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">在做windows phone 开发的时候,有时候我们需要在某些页面中进行声音的播放。而播放的方式也有多种:
  1. 使用MediaElement
  2. 使用SoundEffect
  3. 使用后台播放
  SoundEffect只能播放wav格式的文件;后台播放可以在程序退出后仍然继续播放;MediaElement适用于大多数情况,但不能实现后台播放,MediaElement依赖页面并且在页面中只有一个实例可以正常工作。
  本文讲讲如何在应用中使用MediaElement作为程序全局播放器,并提供一个帮助类。
  由于MediaElement依赖于UI,我们不能在ViewModel中创建一个MediaElement实例进行声音的播放,所以我们需要将MediaElement放置在一个UI容器中,下面是帮助类的代码:
  public class GlobalPlayer{    static Popup popUp;    private static MediaElement _player;    public static void Play(string filePath)    {        popUp = new Popup();        _player = new MediaElement();        _player.Source = null;        popUp.Child = _player;        popUp.IsOpen = true;        try        {            using (var store = IsolatedStorageFile.GetUserStoreForApplication())            {                using (var stream = new IsolatedStorageFileStream(filePath, FileMode.Open, store))                {                    _player.SetSource(stream);                    _player.Volume = 1.0;                    _player.Play();                    _player.MediaEnded += new RoutedEventHandler((sender, e) =>                    {                        stream.Close();                        stream.Dispose();                        _player.Source = null;                        _player = null;                                            });                    _player.MediaFailed += new EventHandler<ExceptionRoutedEventArgs>((s, args) =>                    {                        stream.Close();                        stream.Dispose();                        _player.Source = null;                        _player = null;                    });                }            }        }        catch (Exception)        {            _player.Source = null;            _player = null;                    }    }    public static void StopPlay()    {        if (_player != null && _player.CurrentState == MediaElementState.Playing)        {            try            {                _player.Source = null;                _player.Stop();            }            catch (Exception)            {                //throw;            }        }    }}
使用方法十分简单,当我们需要在不同的页面播放同一声音的时候,将存储在独立空间的路径传入即可。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表