ApplicationSettings に加えた変更が、AudioPlayerAgents ApplicationSettings で更新されていないように見えるという問題がありますが、これは同じである必要があります。
私のプログラムは次のようになります。
OnNavigatedTo の MainPage.xaml.cs で、オーディオ ファイルの 2 つの配列を作成しています。
Audio[] aud = new Audio[2];
Audio[] aud1 = new Audio[2];
aud[0] = new Audio(new Uri("1.mp3", UriKind.Relative),
"Test1",
"Test1",
new Uri("Images/Covers/0000000018724345_256x256_large.jpg", UriKind.Relative));
aud[1] = new Audio(new Uri("2.mp3", UriKind.Relative),
"Test2",
"Test2",
new Uri("Images/Covers/0000000018698018_256x256_large.jpg", UriKind.Relative));
aud1[0] = new Audio(new Uri("3.mp3", UriKind.Relative),
"Test3",
"Test3",
new Uri("Images/Covers/0000000018465020_256x256_large.jpg", UriKind.Relative));
aud1[1] = new Audio(new Uri("http://traffic.libsyn.com/wpradio/WPRadio_29.mp3", UriKind.Absolute),
"Episode 29",
"Windows Phone Radio",
new Uri("Images/Covers/0000000018844939_256x256_large.jpg", UriKind.Relative));
次に、この配列の 1 つを ApplicationSettings に保存しています。
IsolatedStorageSettings.ApplicationSettings["tracklist"] = aud;
IsolatedStorageSettings.ApplicationSettings.Save();
次に、BackgroundAudioPlayer を閉じて開始します。
BackgroundAudioPlayer.Instance.Close();
BackgroundAudioPlayer.Instance.Play();
私の AudioPlayer では、以前に保存した ApplicationSettings を読み込んでいますが、これは正常に動作します。
Audio[] aud;
IsolatedStorageSettings.ApplicationSettings.TryGetValue<Audio[]>("tracklist", out aud);
しかし、後で MainPage.xaml.cs の ApplicationSettings を他の配列に置き換えたい場合
IsolatedStorageSettings.ApplicationSettings["tracklist"] = aud1;
IsolatedStorageSettings.ApplicationSettings.Save();
AudioPlayer に再度値をロードします。ApplicationSettings にはまだ古い値が残っています。AudioPlayerAgent と MainPage の両方が同じ ApplicationSettings を使用する必要があります。実際、初めて保存されて AudioPlayerAgent で使用できるようになるので、何が欠けているのでしょうか?
私のオーディオクラスは次のようになります
[DataContractAttribute]
public class Audio
{
[DataMember]
public Uri TrackUrl { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string Artist { get; set; }
[DataMember]
public Uri CoverURL { get; set; }
public Audio(Uri trackUrl, string title, string artist, Uri coverUrl)
{
TrackUrl = trackUrl;
Title = title;
Artist = artist;
CoverURL = coverUrl;
}
}