2

我正在开发一个应用程序来通过流媒体播放在线广播。我用过 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,其中有一个“退出”按钮。一旦用户单击此按钮,流应该停止并且应用程序应该自行关闭。我无法以编程方式关闭应用程序。代码如下..

 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 之外的任何其他方式在后台流式传输媒体,也请提出建议.. 希望尽快回复。提前感谢大家。

4

1 回答 1

0

为此,您必须使用BackgroundAudioPlayer

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

于 2013-05-28T12:05:16.573 回答