如何确定应用程序已下载多长时间

时间:2013-10-10 03:40:24

标签: windows-phone-7 windows-phone-8

对于试用版应用程序,我需要确定在Windows Phone设备上下载或运行应用程序的时间。我想将此值与当前日期/时间进行比较,然后在应用程序仍处于试用模式并且已在用户设备上运行超过特定天数时显示弹出窗口。检查这个的最佳方法是什么?我是否会在IsolatedStorage中存储应用程序的第一个运行DateTime并在每次加载应用程序时查询该值?有没有更好的办法?我到底该怎么做?需要注意的是,我目前正在存储该应用程序是否已首次加载,以便显示一个欢迎页面,其中包含一些快速指示/提示。

1 个答案:

答案 0 :(得分:0)

听起来你想测量应用程序运行的时间(即在前台)。

您希望每次启动/激活应用时记录时间戳,并在关闭/停用应用时记录另一个时间戳。您可以从这两个时间戳计算经过的时间,并将此值存储在IsolatedStorage中。如果IsolatedStorage中已存在某个值,则会将新的已用时间添加到现有值中。然后,您可以在启动时检查存储的值,并确定如果它超过您的阈值该怎么办。

我在App.xaml.cs中用来记录时间戳的以下(未经测试的)代码:

DateTime startTimestamp;
IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
const int MAX_TRIAL_USAGE = 5;

void Start()
{
    startTimestamp = DateTime.Now;

    if (settings.Contains("ElapsedTime"))
    {
        TimeSpan elapsed = (TimeSpan)settings["ElapsedTime"];

        if (elapsed > TimeSpan.FromDays(MAX_TRIAL_USAGE))
        {
            // Trial has expired, do something
        }
    }
}

void Stop()
{
    TimeSpan elapsed = DateTime.Now - startTimestamp;

    if (!settings.Contains("ElapsedTime"))
    {
        settings.Add("ElapsedTime", elapsed);
    }
    else
    {
        elapsed += (TimeSpan)settings["ElapsedTime"];
        settings["ElapsedTime"] = elapsed;
    }

    settings.Save();
}

最后,将这些方法连接到应用程序生命周期事件:

private void Application_Launching(object sender, LaunchingEventArgs e)
{
    Start();
}

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    Start();
}

private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
    Stop();
}

private void Application_Closing(object sender, ClosingEventArgs e)
{
    Stop();
}