在Windows Phone 8.1上播放MVVM上的背景音频

时间:2014-06-09 00:42:26

标签: c# xaml mvvm windows-phone-8.1 background-audio

Im Realy坚持这一点。到目前为止,MSDN foruns上的任何人都无法帮助我。

我有一个MVVM应用程序,一个经过编辑的AppStudio应用程序。我在应用程序上添加了播客功能。该功能完美地适用于播客音频永远不会在背景上播放的事实。

我在MediaElement上声明了一个支持后台的媒体。这是我观点的XAML

<DataTemplate x:Key="PodCast1DetailDetail">
    <ScrollViewer>
        <StackPanel>
            <TextBlock Margin="0,16" Text="{Binding Title, Converter={StaticResource TextPlainConverter}, ConverterParameter = 140}" Style="{StaticResource SubHeaderText}" />
            <MediaElement x:Name="PodCast" 
                Source="{Binding Enclosure}"
                PosterSource="{Binding PodcastImg}"
                CurrentStateChanged="Media_CurrentStateChanged"
                RateChanged="Media_RateChanged"
                AreTransportControlsEnabled ="True"
                AudioCategory="BackgroundCapableMedia"
                Stretch="UniformToFill"
                Width="340"
                Height="auto"
                MediaFailed="Media_MediaFailed"
                MediaOpened="Media_MediaOpened"
                MediaEnded="Media_MediaEnded"
                AutoPlay="False"
                HorizontalAlignment="Stretch"/>



                <!--<Image Source="{Binding ImageUrl, Converter={StaticResource ThumbnailConverter}, ConverterParameter=300}" Stretch="Uniform" />-->
            <TextBlock Margin="0,12" Style="{StaticResource ItemContentText}" Text="{Binding Content, Converter={StaticResource TextPlainConverter}}" />
            <!--<controls:WebControl Html="{Binding Content}" Width="auto" Height="1000" Foreground="{StaticResource AppForegroundColor}" />-->
        </StackPanel>
    </ScrollViewer>
</DataTemplate>

以下是详细信息页面上的XAML:

<FlipView x:Name="FlipViewPodCast" Grid.Row="1" TabIndex="1"
        DataContext="{Binding NextCastModel}"
          ItemsSource="{Binding Items}"
          ItemTemplate="{StaticResource NextCast1DetailDetail}"
          SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
          ItemContainerStyle="{StaticResource FlipItemStyle}">
     </FlipView>

遵循详细信息页面背后的所有代码:

    using System;
using System.Diagnostics;
using System.Threading;
using System.Net.NetworkInformation;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using Windows.ApplicationModel.DataTransfer;
using Windows.Media;
using Windows.Media.Playback;
using Windows.UI.Core;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using AppStudio.Services;
using AppStudio.ViewModels;


namespace AppStudio.Views
{
    public sealed partial class PodCastDetail : Page
    {
        private NavigationHelper _navigationHelper;

        private DataTransferManager _dataTransferManager;




        public PodCastDetail()
        {
            this.InitializeComponent();
            _navigationHelper = new NavigationHelper(this);


        }

        public PodCastViewModel PodCastModel { get; private set; }

        public NavigationHelper NavigationHelper
        {
            get { return _navigationHelper; }
        }


        protected override void OnNavigatedTo(NavigationEventArgs e)
        {

            _dataTransferManager = DataTransferManager.GetForCurrentView();
            _dataTransferManager.DataRequested += OnDataRequested;

            _navigationHelper.OnNavigatedTo(e);

            PodCastModel = NavigationServices.CurrentViewModel as PodCastViewModel;
            if (PodCastModel != null)
            {
                PodCastModel.ViewType = ViewTypes.Detail;
            }
            DataContext = this;


        }

        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            _navigationHelper.OnNavigatedFrom(e);
            _dataTransferManager.DataRequested -= OnDataRequested;

        }

        private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
        {
            if (PodCastModel != null)
            {
                PodCastModel.GetShareContent(args.Request);
            }
        }




    }
}

有人可以帮帮我吗?我真的坚持这个。 感谢

2 个答案:

答案 0 :(得分:0)

我能说什么......首先,它是在应用程序中创建的MediaElement对象,与ListView或连接的触发器相同。切换应用程序时会发生什么? ListView会激活吗?本地文件在后台播放,因为默认播放器播放它们,单击媒体控制的标题轨道(UVC面板)。我将打开默认播放器,而不是您的应用程序。

我认为这应该会对你有帮助。

How to play audio in the background (XAML)

Overview: Background audio (Windows Phone Store apps)

Background task sample

嗯,至少结果是,我完成了自己的播放器,没有问题播放以及本地和流媒体曲目:3

答案 1 :(得分:0)

请注意,目前Windows Phone和Windows应用商店应用对背景音频的工作方式不同。

对于手机上的背景音频,您不能使用XAML中声明的MediaElement:而是需要使用后台音频任务来完成音频工作。

您需要关注Windows Phone specific instructions on MSDN。这将为您指出一个非常有用的背景音频代码示例。