如何在后台播放MediaElement。

时间:2013-05-28 11:27:37

标签: windows-phone-7

我正在开发一个通过流媒体播放在线广播的应用程序。我使用过MediaElement。但问题是播放器不能在后台播放。我的意思是一旦我点击手机上的“开始”或“后退”按钮,流媒体和音频就会停止。 我没有在任何设备上测试过,所以请告知我它是否在模拟器中发生但不是设备。这是我的代码..

private void Play()
    {
        if (mediaElement == null || mediaElement.CurrentState != MediaElementState.Playing)
        {
            if (SystemTray.ProgressIndicator == null)
                SystemTray.ProgressIndicator = new ProgressIndicator();

            SystemTray.ProgressIndicator.IsIndeterminate = true;
            SystemTray.ProgressIndicator.IsVisible = true;
            SystemTray.ProgressIndicator.Text = "Connecting to *********...";

            mediaStream = new ********.RadioStream(uri);


            mediaStream.StreamSetupComplete += (o, e) =>
            {
                Dispatcher.BeginInvoke(() =>
                {
                    if (mediaElement != null)
                    {
                        LayoutRoot.Children.Remove(mediaElement);
                    }
                    mediaElement = new MediaElement();
                    mediaElement.Volume = 1.0;
                    LayoutRoot.Children.Add(mediaElement);
                    mediaElement.SetSource(mediaStream);

                    SystemTray.ProgressIndicator.IsVisible = false;
                });
            };
        }
    }

我想知道在后台播放这些内容的步骤。至少当用户按下“开始”按钮时,音频流不应该停止。

我还有一个问题是我添加了一个ApplicationBarMenu,其中有一个“Exit”按钮。用户单击此按钮后,流媒体应立即停止,应用程序应自行关闭。我无法以编程方式关闭应用程序。代码如下:

 void exit_Click(object sender, EventArgs e)
    {
        if (playing)
        {
            MessageBoxResult Choice;
            Choice = MessageBox.Show("Media is currently playing, do you want to stop it?", "Stop Player", MessageBoxButton.OKCancel);
            if (Choice == MessageBoxResult.OK)
            {
                ImageBrush brush = new ImageBrush();
                brush.ImageSource = new BitmapImage(new Uri(@"Images/play.png", UriKind.Relative));
                play.Background = brush;
                Stop();
                playing = false;
                try
                {

                //    if (NavigationService.CanGoBack)
                //    {
                //        while (NavigationService.RemoveBackEntry() != null)
                //        {
                //            NavigationService.RemoveBackEntry();
                //        }
                //    }
                }
                catch
                {
                }
            }

            else
            {

            }
          }

        }

请帮我正确的代码。即使除了MediaElement之外还有其他任何方式在媒体中流媒体,请同样建议.. 希望尽快回复。感谢所有提前。

1 个答案:

答案 0 :(得分:0)

您必须使用BackgroundAudioPlayer

您也应该查看Microsoft.Phone.BackgroundAudio命名空间。