オーディオ/メディアプレーヤーのロジックをナビゲーションロジックやページオブジェクトと強く結びつけないようにすることをお勧めします。特にバックグラウンドで再生を続けたい場合は、こうした遊びなどなどを一時停止再生コマンドが公開されると、それはオーディオファイルを再生するには、バックグラウンドスレッドを開始することができます -
最も簡単な方法は、オーディオプレーヤーコマンドのMessengingCenterに加入してAudioPlayerServiceクラスを持っているだろう。あなたはページ1からページ2に移動したときに
MessagingCenter.Subscribe<Page2, AudioPlayerArgs> (this, "Play", (sender, args) => {
// initiate thread to play song
});
さて、あなたは、曲の再生を開始するMessengingCenterを通じてAudioPlayerServiceクラスにコマンドを送信/公開することができます。このようにして、page1またはpage2の間での前後の任意の回数は、すでに同じオーディオファイルを再生している場合に再生コマンドを無視できるため、オーディオプレーヤーには影響しません。
MessagingCenter.Send<Page2, AudioPlayerArgs> (this, "Play", new AudioPlayerArgs("<sound file path>"));
注:私は個人的に私のコードでMessengingCenterの使用を避ける - などを一時停止し、より良いアプローチではなく、再生するために適切な方法でIAudioPlayerServiceするためのインタフェースを導入することであろうとしてAudioPlayerService状態を維持するためにDependencyServiceを使用グローバルオブジェクト(デフォルト動作)
public interface IAudioPlayerService {
bool PlayAudio(string file);
bool PauseAudio();
bool StopAudio();
}
[assembly: Xamarin.Forms.Dependency (typeof (IAudioPlayerService))]
public class AudioPlayerService : IAudioPlayerService {
//implement your methods
}
そして、次のコードを使用して、Page/ViewModelオブジェクトのオーディオプレーヤーサービスを制御します。
DependencyService.Get<IAudioPlayerService>().Play("<sound file path>");
出典
2017-04-25 16:11:36
Ada
ときに近いページバック時に)何気に来たことはシングルトンとしてそのページを持っている、と 'PushModalAsync(にパラメータとして渡すことですイベント設定位置 – Krishna
最初に登場するページでは、歌とその位置を保存'、毎回作成しないでください – Alex
私はそれが可能であると思います。あなたはSongの一時停止状態を取得し、それをViewModelでMessagingCenterを使用して&再びページが起動されたときにVMに保存して再生できるはずです一時停止した場所の曲。 – Dilmah