Wie kann ich die Einstellungen im IsolatedStorage speichern, während die BackgroundAudioPlayer-Instanz aktiv ist?
Ich habe zwei Projekte in meiner Lösung. Sagen wir Projekt A und Projekt B.
Projekt A
Es ist das Hauptprojekt und hat Einstellungen. Ich habe ein Kontrollkästchen, um dem Benutzer die Option zu geben, Titel zu wiederholen. Dieses Projekt kann auch auf die öffentlichen Instanzen von PROJECT B zugreifen.
Projekt B
Es ist der BackgroundAudioAgent und hat seine eigenen Einstellungen. Dieses Projekt hat keinen Zugriff auf die PROJECT A-Einstellungen. Daher muss ich in PROJECT A auf die Einstellungen von PROJECT B zugreifen und dort speichern. Wenn "Wiederholen" aktiviert ist, startet der Agent die Wiedergabe neu.
PROBLEM
Ich kann die Einstellungen nicht speichern (mit anderen Worten, die Einstellungen werden gespeichert, dies hat jedoch keine Auswirkungen), wenn die BackgroundAudioPlayer-Instanz ausgeführt wird. Ich muss die Instanz immer schließen, und wenn ich das tue, können die Einstellungen geändert werden.
FRAGE
Was ist der effizienteste Weg, um das zu tun, was ich versuche?
Wie kann ich die Einstellungen im IsolatedStorage speichern, ohne die BackgroundAudioPlayer-Instanz zu schließen? (Da ich keinen Titel unterbrechen möchte, der gerade abgespielt wird).
CODE: Was muss ich tun, um die Einstellungen zu speichern?
public bool SettingAudioRepeat
{
get
{
return GetValueOrDefault<bool>(SettingAudioRepeatKeyName, SettingAudioRepeatDefault);
}
set
{
if (AddOrUpdateValue(SettingAudioRepeatKeyName, value))
{
bool resumePlay = false;
try
{
if (BackgroundAudioPlayer.Instance.PlayerState != PlayState.Shutdown)
{
BackgroundAudioPlayer.Instance.Close();
resumePlay = true;
}
}
catch { }
TaskEx.Delay(300);
IQR_Settings iqrSet = new IQR_Settings();
iqrSet.SettingAudioRepeat = value;
iqrSet.Save(); //Saving the settings for Project B
Save(); //Saving the settings for Project A
try
{
if (resumePlay)
BackgroundAudioPlayer.Instance.Play(); //It starts all from scracth
}
catch { }
}
}
public T GetValueOrDefault<T>(string Key, T defaultValue)
{
T value;
// If the key exists, retrieve the value.
if (settings.Contains(Key))
{
value = (T)settings[Key];
}
// Otherwise, use the default value.
else
{
value = defaultValue;
}
return value;
}
CODE: Was ich einfach machen will.
public bool SettingAudioRepeat
{
get
{
return GetValueOrDefault<bool>(SettingAudioRepeatKeyName, SettingAudioRepeatDefault);
}
set
{
if (AddOrUpdateValue(SettingAudioRepeatKeyName, value))
{
IQR_Settings iqrSet = new IQR_Settings();
iqrSet.SettingAudioRepeat = value;
iqrSet.Save(); //Saving the settings for Project B
Save(); //Saving the settings for Project A
}
}