2012-04-12 79 views
1

我是Android编程的新手,面临一个挑战,可能在此论坛上在几秒钟内解决。应用程序启动时的日期更改检测 - Android

我想弄清楚如何在启动过程中启用应用程序以检测自上次启动以来日期是否发生了变化。

当日期发生变化时,我打算更改textview中的值。但是,如果没有,textview不会改变。 - 我知道如何创建这个功能,但坚持日期变化问题?

我已经阅读了alarmmanager,但不确定这是必需的,因为它不需要在启动时的特定时间发生。

任何意见,将不胜感激。

感谢,

P.S我创建一个基本的报价申请并希望包括日页面的引用。为了做到这一点,我需要知道在订单日期是否已经改变了应用程序更改报价

+0

我不明白问题 – njzk2 2012-04-12 15:01:03

+0

我正在创建一个基本报价应用程序,并且希望包含当天页面的报价。为了做到这一点,我需要知道在订单日期是否已经改变了应用程序更改报价,我希望这是有道理的 – user983965 2012-04-12 15:03:35

+0

是的,它的作用。你大概可以存储在SharedPreferences一天(DAY_OF_YEAR在日历)和一年,活动期间比较值启动 – njzk2 2012-04-12 15:06:42

回答

4

你所需要的是这样的:
一个SharedPreference与描述的最后日期很值。
一个Calendar

当你的活动开始时(在onCreate()方法似乎是一个很好的地方),你可以得到一个新的Calendar。这将有当前的日期,你可以提取当天:

Calendar c = Calendar.getInstance(); 
int thisDay = c.get(Calendar.DAY_OF_YEAR); //You can chose something else to compare too, such as DATE.. 
long todayMillis = c.getTimeInMillis(); //We might need this a bit later. 

然后,您可以读取最后一次可能保存的值和日历设置为这个值,那么今天的比较:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
long last = prefs.getLong("date", 0); //If we don't have a saved value, use 0. 
c.setTimeInMillis(last); 
int lastDay = c.get(Calendar.DAY_OF_YEAR); 

if(last==0 || lastDay != thisDay){ 
    //New day, update TextView and preference: 
    SharedPreferences.Editor edit = prefs.edit(); 
    edit.putLong("date", todayMillis); 
    edit.commit(); 
} 
+0

在极不可能的情况下,自从去年以来有人没有看过这个应用程序,并且恰好在一年中的同一天打开它,它会打破这个逻辑:)年份也应该存储为这个荒谬的情况:P(对不起..不得不哈哈) – dymmeh 2012-04-12 15:09:17

+0

@dymmeh,这是正确的,我想包括一些关于这个,但这一切都取决于如何“一天的报价”应该如何工作,如果有365(366?)报价,一这一年中的每一天都不是问题。否则,可以计算自某一天以来经过的天数并比较这些值。 – Jave 2012-04-12 15:11:44

+0

如果引号永远不会改变,那么这种说法是非常正确的。我期待他从服务器上获取它们,但我想我假设太多了。 – dymmeh 2012-04-12 15:22:41

0

这样做,当应用程序启动:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this) 

if (prefs.getBoolean("firstLaunch", true)) 
{ 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putBoolean("firstLaunch", false); 
    editor.putInt("date", new Date().getTime()); 
    editor.commit(); 
} 
else 
{ 
    if (new Date().getTime() != prefs.getInt("date", 0)) 
    { 
      // Do something 
    } 
} 
+0

这是不行的。 getTime是毫秒,并且一直在变化。 – njzk2 2012-04-12 15:05:50

+0

是的,我很快就做到了。检查Android javadoc以查找如何使用Date()。 – Manitoba 2012-04-12 15:07:55

相关问题