在Windows Phone 8.1背景中播放声音

时间:2014-05-28 06:35:39

标签: c# windows-phone windows-phone-8.1

我正在编写一个需要背景音乐的应用。下面是我搜索不同论坛后的代码。

class AudioPlayer : IBackgroundTask
{
    private BackgroundTaskDeferral _deferral;
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        _deferral = taskInstance.GetDeferral();
        taskInstance.Canceled += TaskInstance_Canceled;
    }
    private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
    {
        _deferral.Complete();
    }

    //===========================================================================================================
    public void startTick()
    {
        BackgroundMediaPlayer.Current.SetUriSource(new Uri("ms-appx:///Audio/clock.wav"));
        BackgroundMediaPlayer.Current.Play();
    }
}  

问题是它不起作用。模拟器没有声音。请帮助!

3 个答案:

答案 0 :(得分:1)

有些事情可能出错(我想这不是你的所有代码)。如果你按照Bacground Audio Overview,最好的就在这里。

还请检查您是否添加了所需的声明(我怀疑这可能是一个问题):转到您的Package.appxmanifest文件,打开声明然后您应该添加{{1使用Background Tasks(作为suppoerted任务类型)并指定其入口点(可能是Audio)。

还要记住,正如MSDN(上面的链接)所说:

  

您的后台任务在您的应用首次访问前台应用代码中的BackgroundMediaPlayer.Current时启动。

我建议在yournamespace.AudioPlayer方法设置一个断点,你应该看看Run是否已经启动。另请记住在UI和AudioPalyer之间提供通信 - ToUIToPlayer(当然,如果您需要)。

您可能还想配置SMTP,以便您的AudioPlayer会对您点击VolumeControl时显示的那些按钮作出反应。

答案 1 :(得分:0)

为了帮助理解BackgroundMediaPlayer的正确用法,请查看this示例,您的想法将被清除。您必须集成另一个项目的参考,以使用背景音频。只是看看。希望这有帮助。

答案 2 :(得分:0)

如果其他人偶然发现,Win Phone 8.1上的任何IBackgroundTask都需要包含在WinRT组件项目类型中,而 包含在类库或PCL中。

MediaPlayer exe将退出,如果你给它一个dll,你就会被拉掉你的头发。

这一点并确保你的appxmanifest文件中的入口点路径是正确的,你应该好好去。只需在Run()方法中放置一个断点即可验证。