4

我有问题,它似乎像我对我的ApplicationSettings所做的更改没有更新在我的AudioPlayerAgents应用程序设置应该是相同的?!是否有可能有不同的IsolatedStorageSettings.ApplicationSettings?

我的计划是这样的:

在我在的OnNavigatedTo MainPage.xaml.cs中,我创建音频文件的两个数组

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)); 

然后我保存在此的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); 

但是,当我以后要与其他阵列

IsolatedStorageSettings.ApplicationSettings["tracklist"] = aud1; 
    IsolatedStorageSettings.ApplicationSettings.Save(); 

更换的applicationSettings在我MainPage.xaml.cs中在我的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; 
    } 
} 
+0

您是否在再次保存之前尝试过执行IsolatedStorageSettings.ApplicationSettings.Clear()? – Etch

+0

是的,当我在我的MainPage中清除时,我的MusicPlayerAgent中仍然存在旧值。如果我清除MusicPlayerAgent中的值,那么当我下次尝试阅读它时没有值。 – Philiiiiiipp

+0

Hi Philiiiiiipp,你有没有设法解决这个问题?我也在WP8应用程序中使用它,甚至在接受答案的讨论后也没有帮助(我在解决方案中创建了第三个项目,负责与isostorage进行交互的类也没有帮助)。 – Anton

回答

1

我有,你有MusicPlayerAgent在另一个组件/ DLL的感觉。如果这样做会解释问题,因为每个程序集都有自己的独立存储。如果他们在同一个程序集中,我不知道为什么这样做不起作用,因为我几乎在我所有的手机应用程序中都是这样做的。这里是我读过的隔离存储上的最佳读物。如果有的话,我希望链接是一个很好的阅读。 Link

+0

好吧,这可能是问题,我有他们在不同的项目,当我去右键点击项目 - >属性和更改程序集名称是相同的两个项目中,应用程序不再启动。我怎样才能把他们放在同一个大会? – Philiiiiiipp

+0

也许不同的方法是编写一个可用于另一个项目的类,该项目从1个项目中分离存储读取和写入,这是我过去的路线。 – Etch

+0

是的,我目前的做法是在两者之间有一个串行器来读取文件中的值,这也可以很好地工作。但我仍然无法理解这个IsolatedStorageSettings的工作原理。 – Philiiiiiipp

0

我不明白IsolatedStorage如何在手机上工作。 PC应用程序中的相同名称空间具有显式的Scope属性,因此您至少可以知道是否有单独的父文件夹。

如果您不能将两个项目合并为一个,只需将所有文件从一个文件加载到另一个文件中,则至少可以将一个类或方法添加到从IsolatedStorage加载类的项目中,并返回一个实例,然后从另一个项目中调用它,在第二个项目中添加一个引用(在Solution Explorer中的References文件夹中),以便可以调用它。

1

我面临同样的问题。在我看来,IsolatedStorageSettings是种类“缓存”成静态的东西。也就是说,直到后台进程和前台进程都在运行,他们每个人都将使用自己版本的IsolatedStorageSettings。 越来越深成原来的代码,我发现了以下内容:在方法重载

public sealed class IsolatedStorageSettings : ... 
{ 
    private static IsolatedStorageSettings s_appSettings; 
    ... 
    public static IsolatedStorageSettings ApplicationSettings 
    { 
     get 
     { 
      if (IsolatedStorageSettings.s_appSettings == null) 
      { 
       IsolatedStorageSettings.s_appSettings = new IsolatedStorageSettings(false); 
      } 
      return IsolatedStorageSettings.s_appSettings; 
     } 
    } 
    ... 
    private IsolatedStorageSettings(bool useSiteSettings) 
    { 
     if (useSiteSettings) 
     { 
      throw new NotSupportedException(); 
     } 
     this._appStore = IsolatedStorageFile.GetUserStoreForApplication(); 
     this.Reload(); 
    } 

在这里你可以看到IsolatedStorageSettings实际加载的每个进程只有一次(因为它是静态变量)。 翻看代码,我发现没有其他地方调用Reload。

我可以建议大家面临同样的问题,用“自己的”设置存储共享AudioAgent和App

据我所知,最好的做法是(如Philiiiiiipp在他最后的comment表示)之间的动态数据使用AudioTrack.Tag属性。

相关问题