【问题标题】:WP7 how to detect when audio track goes to end?WP7如何检测音轨何时结束?
【发布时间】:2012-11-29 03:33:12
【问题描述】:

我在我的 Windows Phone 7 应用程序中使用BackgroundAudioPlayer 代理。当track结束时,agent端收到TrackEnded事件,但UI端没有收到任何事件。

另外,当我故意将音轨的位置设置到它的末尾,然后调用Play(),代理端收到TrackEnded事件(因为轨道已经结束),但UI端确实收到@ 987654328@ 在其PlayStateChanged 处理程序中。好诡异!

如何让 UI 知道一首曲目已经结束?通过隔离存储进行通信不是我的最爱!

【问题讨论】:

  • 在您的带有 UI 的应用中,您是否订阅了 BackgroundAudioPlayer 实例的 PlayerStateChanged 事件?这个MSDN example 展示了如何将它全部连接起来。
  • @NeilTurner 是的,当然,我已经订阅了 UI 端的 PlayStateChanged 事件
  • 当在PlayStateChanged 事件处理程序中时,BackgroundAudioPlayer.Instance.PlayerState == PlayState.TrackEnded 会发生吗?我看到其他人对此有疑问,WP8 有新的 `IntermediatePlayState` 信息作为其EventArgs 的一部分来提供帮助。
  • @NeilTurner TrackEnded 事件仅在代理端通知!

标签: windows-phone-7 events audio agent


【解决方案1】:

根据研究和一些测试,使用独立存储作为BackgroundAudioPlayer 的后台和前台实例之间的中间人仍然是 Windows Phone 7 的唯一途径。这里提到了这些选项(我知道你是知道)...

http://blogs.msdn.com/b/wpukcoe/archive/2012/02/10/background-audio-in-windows-phone-7-5-part-2.aspx

http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202944(v=vs.105).aspx

https://stackoverflow.com/a/11419680/247257

Peter Torr 也证实了这一点,他说:

例如,代理可能需要告诉前台“我刚刚开始预下载下一首曲目”或“我更新了数据库表,你应该刷新你的状态”。 Windows Phone OS 7.1 无法创建此类通知;充其量您可以使用轮询技术对其进行建模,但这种方法效率低且容易出错。

唯一的好消息是,在同一篇文章中,他为 Windows Phone 8 提供了一个更可靠的解决方案(使用 IPC 的命名事件)...

http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/03/27/using-named-events-to-coordinate-foreground-apps-and-background-agents.aspx

【讨论】:

    猜你喜欢
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2016-08-04
    相关资源
    最近更新 更多