建议不要将音频/媒体播放器逻辑与导航逻辑或页面对象紧密结合在一起 - 尤其是当您希望它在后台继续播放时。
简单的方法将有赞同MessengingCenter的音频播放器命令的AudioPlayerService类 - 如播放,暂停等。当播放命令发布后,它可以启动一个后台线程来播放音频文件。
MessagingCenter.Subscribe<Page2, AudioPlayerArgs> (this, "Play", (sender, args) => {
// initiate thread to play song
});
现在,当你从第1页第2页到导航,你可以发布/通过MessengingCenter发送命令到AudioPlayerService类开始播放歌曲。这样,page1或page2之间的任何数量的来回都不会影响音频播放器,因为如果已经播放相同的音频文件,它可以忽略播放命令。
MessagingCenter.Send<Page2, AudioPlayerArgs> (this, "Play", new AudioPlayerArgs("<sound file path>"));
注:我个人避免在我的代码使用MessengingCenter - 一个更好的方法将是相当介绍了IAudioPlayerService接口与适当的方法来播放,暂停等,并使用DependencyService保持AudioPlayerService状态一个全局对象(这是默认行为)
public interface IAudioPlayerService {
bool PlayAudio(string file);
bool PauseAudio();
bool StopAudio();
}
[assembly: Xamarin.Forms.Dependency (typeof (IAudioPlayerService))]
public class AudioPlayerService : IAudioPlayerService {
//implement your methods
}
而且,使用下面的代码来控制你的音频播放器服务在你的页面/视图模型对象。
DependencyService.Get<IAudioPlayerService>().Play("<sound file path>");
来源
2017-04-25 16:11:36
Ada
当关闭网页时保存回歌曲和它的位置,在页面中出现的事件设置位置 – Krishna
首先什么来铭记是有这个页面作为单,并通过作为参数传递给'PushModalAsync() ',不是每次都创建它 – Alex
我认为这是可能的,你可以获得歌曲的暂停状态并使用MessagingCenter将其保存在ViewModel中,当页面启动时,您应该能够从VM中检索数据并播放从它被暂停的地方发出的歌曲。 – Dilmah