我正在编写一个需要背景音乐的应用。下面是我搜索不同论坛后的代码。
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();
}
}
问题是它不起作用。模拟器没有声音。请帮助!
答案 0 :(得分:1)
有些事情可能出错(我想这不是你的所有代码)。如果你按照Bacground Audio Overview,最好的就在这里。
还请检查您是否添加了所需的声明(我怀疑这可能是一个问题):转到您的Package.appxmanifest
文件,打开声明然后您应该添加{{1使用Background Tasks
(作为suppoerted任务类型)并指定其入口点(可能是Audio
)。
还要记住,正如MSDN(上面的链接)所说:
您的后台任务在您的应用首次访问前台应用代码中的BackgroundMediaPlayer.Current时启动。
我建议在yournamespace.AudioPlayer
方法设置一个断点,你应该看看Run
是否已经启动。另请记住在UI和AudioPalyer之间提供通信 - ToUI和ToPlayer(当然,如果您需要)。
您可能还想配置SMTP,以便您的AudioPlayer会对您点击VolumeControl时显示的那些按钮作出反应。
答案 1 :(得分:0)
为了帮助理解BackgroundMediaPlayer的正确用法,请查看this示例,您的想法将被清除。您必须集成另一个项目的参考,以使用背景音频。只是看看。希望这有帮助。
答案 2 :(得分:0)
如果其他人偶然发现,Win Phone 8.1上的任何IBackgroundTask都需要包含在WinRT组件项目类型中,而 不 包含在类库或PCL中。
MediaPlayer exe将退出,如果你给它一个dll,你就会被拉掉你的头发。
这一点并确保你的appxmanifest文件中的入口点路径是正确的,你应该好好去。只需在Run()方法中放置一个断点即可验证。