建議不要將音頻/媒體播放器邏輯與導航邏輯或頁面對象緊密結合在一起 - 尤其是當您希望它在後臺繼續播放時。
簡單的方法將有贊同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