我们在很多应用中,都用到MediaElement这个控件,用来播放音乐视频,如果外部播放器在播放音乐,当进入有MediaElement控件的应用中时,播放的音乐会停止,这主要是外部播放器和MediaElement共用手机的播放硬件资源造成的,如果当我们退出或雪藏当前应用时,外部的播放器也不会恢复回来,为了解决这个问题,我们可以采用下述方案来解决。
首先要处理加载程序,雪藏,恢复,关闭四个事件,即在App.xaml.cs中的四个事件:
- private void Application_Launching(object sender, LaunchingEventArgs e)
- {
- FrameworkDispatcher.Update();
- if (MediaPlayer.State == MediaState.Playing)
- {
- MediaPlayer.Pause();
- }
- }
- private void Application_Activated(object sender, ActivatedEventArgs e)
- {
- if (MediaPlayer.State == MediaState.Playing)
- {
- MediaPlayer.Pause();
- }
- }
- private void Application_Deactivated(object sender, DeactivatedEventArgs e)
- {
- if (MediaPlayer.State == MediaState.Paused || MediaState.Stopped == MediaPlayer.State)
- {
- MediaPlayer.Resume();
- }
- }
- private void Application_Closing(object sender, ClosingEventArgs e)
- {
- if (MediaPlayer.State == MediaState.Paused||MediaState.Stopped==MediaPlayer.State)
- {
- MediaPlayer.Resume();
- }
- }
分别在加载和恢复事件中让外部播放器停下来,在关闭和雪藏事件中恢复外部播放器恢复暂停。
最关键的一点是,MediaElement控件在雪藏后,恢复回来后,就会失去Source属性的值,所以我们得在控件的页面中把雪藏前的MediaElement.Source存储起来,恢复后再把存储的值赋回来,代码如下:
- protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
- {
- PhoneApplicationService.Current.State.Clear();
- if (shengyin_ME.Source != null)
- {
- PhoneApplicationService.Current.State.Add("URL", shengyin_ME.Source);
- }
- base.OnNavigatedFrom(e);
- }
- protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
- {
- if (PhoneApplicationService.Current.State.Keys.Contains("URL"))
- {
- shengyin_ME.Source = PhoneApplicationService.Current.State["URL"] as Uri;
- }
- base.OnNavigatedTo(e);
- }
这样,就能实现在关闭应用或雪藏应用,外部播放器会继续播放。
本文转自桂素伟51CTO博客,原文链接:http://blog.51cto.com/axzxs/788923
,如需转载请自行联系原作者