2011-01-05 10 views
5

Chciałbym wiedzieć, czy w WP7 jest flaga "first run" lub podobna. Moja aplikacja pobiera pewne rzeczy z odizolowanego miejsca, więc chciałbym sprawdzić, czy jest to konieczne po raz pierwszy. Obecnie używam if, aby sprawdzić, czy wymieniony obiekt pamięci istnieje, ale oznacza to, że nie mogę obsłużyć żadnych błędów utraty pamięci w sposób, w jaki chciałbym.Czy jest flaga "first run" w WP7

Odpowiedz

6

Nie sądzę, że jest wbudowana funkcja tego ... ale wiem, co masz na myśli :-) Zaimplementowałem "pierwsze uruchomienie" samodzielnie przy użyciu pamięci masowej iso w open source khan academy for windows phone app. Wszystko, co robię, to zajrzeć do iso storage na bardzo mały plik (po prostu piszę do niego jeden bajt) ... jeśli go tam nie ma, to po raz pierwszy, jeśli jest, aplikacja była uruchamiana więcej niż raz. Zachęcamy do zapoznania się źródła i wziąć moją implementację jeśli chcesz :-)

private static bool hasSeenIntro; 

    /// <summary>Will return false only the first time a user ever runs this. 
    /// Everytime thereafter, a placeholder file will have been written to disk 
    /// and will trigger a value of true.</summary> 
    public static bool HasUserSeenIntro() 
    { 
     if (hasSeenIntro) return true; 

     using (var store = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      if (!store.FileExists(LandingBitFileName)) 
      { 
       // just write a placeholder file one byte long so we know they've landed before 
       using (var stream = store.OpenFile(LandingBitFileName, FileMode.Create)) 
       { 
        stream.Write(new byte[] { 1 }, 0, 1); 
       } 
       return false; 
      } 

      hasSeenIntro = true; 
      return true; 
     } 
    } 
+0

To naprawdę fajne! Ładne i łatwe! – deanvmc

+0

sprytny. zamiast tego można napisać wersję #, aby można było wykryć aktualizacje lub aplikacje z obsługą próbną, można też użyć jej do wykrywania aktualizacji z wersji próbnej na płatną. –

+0

Cześć Joel, czy też uważasz, że nie piszesz bajtu? Zastanawiasz się, czy zdecydowałeś się na to na podstawie jakichkolwiek obserwacji podczas testów. W moich własnych krótkich testach w tym obszarze znalazłem FileExists działa dobrze bez tego. –

4

Jak @HenryC sugerowane w komentarzu zaakceptowanej odpowiedzi użyłem IsolatedStorageSettings do wdrożenia „zachowanie First Run”, tutaj to kod:

private static string FIRST_RUN_FLAG = "FIRST_RUN_FLAG"; 
    private static IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; 

    public bool IsFirstRun() 
    { 
     if (!settings.Contains(FIRST_RUN_FLAG)) 
     { 
      settings.Add(FIRST_RUN_FLAG, false); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
1

Czasami należy wykonać pewne działanie dla każdej aktualizacji ze sklepu Windows, jeśli istnieje zmiana wersji. Umieść ten kod w swojej aplikacji.xaml.cs

private static string FIRST_RUN_FLAG = "FIRST_RUN_FLAG"; 
    private static IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; 

    private static string _CurrentVersion; 

    public static string CurrentVersion 
    { 
     get 
     { 
      if (_CurrentVersion == null) 
      { 
       var versionAttribute = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyFileVersionAttribute), true).FirstOrDefault() as AssemblyFileVersionAttribute; 
       if (versionAttribute != null) 
       { 
        _CurrentVersion = versionAttribute.Version; 
       } 
       else _CurrentVersion = ""; 
      } 

      return _CurrentVersion; 

     } 

    } 

    public static void OnFirstUpdate(Action<String> action) 
    { 
     if (!settings.Contains(FIRST_RUN_FLAG)) 
     { 
      settings.Add(FIRST_RUN_FLAG, CurrentVersion); 
      action(CurrentVersion); 
     } 
     else if (((string)settings[FIRST_RUN_FLAG]) != CurrentVersion) //It Exits But Version do not match 
     { 
      settings[FIRST_RUN_FLAG] = CurrentVersion; 
      action(CurrentVersion); 

     } 

    }