WP7 - 从前台应用程序控制背景音频播放器

时间:2011-10-13 14:35:35

标签: windows-phone-7 windows-phone-7.1

All the samples到目前为止,我看到的是带有硬编码歌曲列表的AudioPlaybackAgents。

我需要从前台应用程序控制列表。对我来说似乎是一个明显的要求。

BackgroundAudioPlayer.Instance.Track api让你看起来可以直接从前景应用程序向BackgroundPlayer添加一个Track,它们应该只是玩。这似乎不起作用

如果“播放列表”只是一条曲目,后台代理会做什么?

如果播放列表是多个曲目,并且在其回调中调用代理以在列表中移动,那么将播放列表从前台应用程序传送到代理的建议方式是什么?

TIA

Pat Long

3 个答案:

答案 0 :(得分:2)

我发现BackgroundAudioPlayer(BAP)和前台应用程序之间的接口很可能是Windows Phone 7.x SDK中最缺乏构思的“工程”部分。 IsolatedStorage对我来说并不适用,因为我的应用程序可以下载许多文件,并且只能在“播放列表”中一次播放几个文件。我应该暂时将这些文件复制到IsolatedStorage中的“特殊”位置,以便代理可以从那里读取播放列表吗?流行10到20MB,我不这么认为。此外,如果我想使用后台传输服务 - 这非常有效,顺便说一句 - 逐步将文件添加到播放列表,我将如何告诉代理在下载时加载更多曲目?如果没有按照正确的顺序设置轨道来解决某些约定,则无法完成。

尝试在代理上使用静态成员将曲目添加到播放列表(正如他们在文档中所建议的那样),并且......嗯...是的,这只是一个非首发。

我现在解决的是管理前台应用中的播放列表,并根据用户的操作逐一将曲目提供给BAP。问题是这不适用于锁定屏幕上显示的BAP控件。它似乎也没有始终如一地处理TrackEnded活动。我只是在使用MediaElement和放弃背景音频的整个范围内。

我希望发明这个API闹剧的人不参与WP的未来版本。

答案 1 :(得分:1)

如果您正在使用播放列表,则假设即使应用不在前台,这些也会添加/更新。在这种情况下,代理必须能够管理播放列表。

如果您一次只播放一首曲目,那么后台代理只需要在您的应用不在前台时保持曲目播放。

应用程序和代理之间的通信充其量是棘手的。最简单的通信方式是在隔离存储中创建文件,一个写入,另一个读取(然后删除)或通过数据库。

答案 2 :(得分:0)

AudioTrack audioTrack =
                new AudioTrack(new Uri("shared\\transfers\\1.mp3", UriKind.RelativeOrAbsolute), null,
                                null,
                                null,
                                null,
                                null,
                                EnabledPlayerControls.Pause);
 BackgroundAudioPlayer.Instance.Track = audioTrack;
                 BackgroundAudioPlayer.Instance.Play();