使用蓝牙耳机控制WP7和WP8应用程序



我为Windows Phone 7.5和Windows Phone 8开发了一个音乐播放器应用程序。现在我想用各种蓝牙设备听音乐。我可以把它连接到我的手机上听音乐,所以效果很好。但在某些情况下,它的行为很奇怪。如果音乐暂停,如果我断开蓝牙,扬声器将恢复播放。我可以在日志中看到,它接收到用户对UserAction.SEEK的操作,该操作位于我关闭蓝牙时的位置。在这一点上,player.Position变量以某种方式变为0,所以它变为0并回到我原来的位置。我不会做任何会导致这种行为的事情。

我想问的是:当我用蓝牙设备做某事时,有没有一种方法可以接管AudioPlaybackAgent的控制权或获得任何控制权。是否发生了任何事件,或者所有这些都由操作系统处理?如果是这样,为什么我的应用程序的行为与股票应用程序不同?此外,为什么我打开蓝牙设备时会收到UserAction.SEEK

如果我的问题不清楚,请毫不犹豫地问!

这是平台的已知问题,但在WP8 GDR2中已修复。您可以通过检测PauseSeekPlayOnUserAction序列来解决此问题。一旦检测到,您可以暂停对OnPlayerStateChanged的下一次调用。需要注意的几件事:

  • OnUserAction的连续调用不能保证在AudioPlayer相同的实例上调用,因此任何状态都应存储在静态状态
  • 扬声器会播放一小段曲目,因此您可能需要将音量设置为0(当然,在记下之前的值之后)

我在GitHub上发布了一个Gist,其中包含了一个完整的实现。示例用法和更详细的问题概述可以在我的博客上找到。

最新更新