Есть ли флаг «первого запуска» в WP7? - PullRequest
5 голосов
/ 06 января 2011

Я хотел бы знать, есть ли флаг «первого запуска» или аналогичный в WP7.Мое приложение вынимает некоторые вещи из изолированного хранилища, поэтому я хотел бы определить, необходимо ли это в первый раз.В настоящее время я использую if, чтобы проверить, существует ли именованный объект хранения, но это означает, что я не могу обрабатывать любые ошибки потери памяти так, как мне бы хотелось.

Ответы [ 3 ]

6 голосов
/ 06 января 2011

Не думаю, что для этого есть встроенная функция ... но я знаю, что вы имеете в виду :-) Я реализовал "первый запуск" сам, используя iso-хранилище в open source академия хана для Windows Phoneприложение .Все, что я делаю, это смотрю в iso-хранилище очень маленький файл (я просто записываю в него один байт) ... если его там нет, то это первый раз, если он там, приложение запускалось более одного раза.Не стесняйтесь проверить источник и взять мою реализацию, если хотите: -)

    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;
        }
    }
4 голосов
/ 20 февраля 2014

Как @HenryC предложил в комментарии к принятому ответу, я использовал IsolatedStorageSettings для реализации «поведения при первом запуске», вот код:

    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 голос
/ 15 ноября 2014

Иногда нам нужно выполнить какое-то действие для каждого обновления из магазина Windows, если есть изменение версии. Поместите этот код в свой App.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);

        }

    }
...