Alexis 发表于 2012-12-22 02:43:35

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

<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;            }      }    }}
使用方法十分简单,当我们需要在不同的页面播放同一声音的时候,将存储在独立空间的路径传入即可。
页: [1]
查看完整版本: Windows Phone实用开发技巧(37):创建一个全局播放器