我需要实现一个用户只能在某个日期之前使用它的应用程序,例如:2017年12月31日。我想我会在每个活动的onResume()函数上实现它,以防止用户在内存中运行应用程序而不会杀死它。
目前,我有6个活动,为每个活动添加代码是可以接受的,但是当应用程序变大时,这种方式非常愚蠢。我该如何改进呢?
答案 0 :(得分:0)
试试这种方式。
在splash activity
或MainActivity
private final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
private final long ONE_DAY = 24 * 60 * 60 * 1000;
@Override
protected void onCreate(Bundle state){
SharedPreferences preferences = getPreferences(MODE_PRIVATE);
String installDate = preferences.getString("InstallDate", null);
if(installDate == null) {
// First run, so save the current date
SharedPreferences.Editor editor = preferences.edit();
Date now = new Date();
String dateString = formatter.format(now);
editor.putString("InstallDate", dateString);
// Commit the edits!
editor.commit();
}
else {
// This is not the 1st run, check install date
Date before = (Date)formatter.parse(installDate);
Date now = new Date();
long diff = now.getTime() - before.getTime();
long days = diff / ONE_DAY;
if(days > 30) { // More than 30 days?
// Expired !!!
}
}
...
}
答案 1 :(得分:0)
截至2014年12月31日,以下内容为isExpired
:
GregorianCalendar expDate = new GregorianCalendar( 2013, 11, 31 ); // midnight
GregorianCalendar now = new GregorianCalendar();
boolean isExpired = now.after( expDate );
注意:月份从0开始。 1月= 0,12月= 11。
答案 2 :(得分:0)
如您提到的一个月检查期限,我强烈建议采用在线方式。我的意思是你需要有一个验证到期的网络服务,否则用户可能会欺骗你,用户可以在本地更改设备的日期和时间,他将继续使用。而对于你的第二个问题
Currently, I have 6 activities, add code to each activity is acceptable, but when an application becomes larger, this way is very stupid. How can I improve it?
不,随着更多活动的增加,您不需要在每个活动中实施可能是未来应用扩展的不良方法。您可以执行以下步骤
1) Create a BaseActivity
2) Your every activity should extend BaseActivity
3) In onResume() method of your BaseActivity, check validity stuff of app user
由于BaseActivity总是一个超类,这意味着每次你的活动onResume调用时,onResume()都会调用它的超类onResume。我希望能帮助你。