我有一个应用程序,它只能工作30天或几天。
这只是一个简单的应用程序,它可以播放一些音频文件,与显示的图像和显示的文本相对应。
只有一种方法可以真正实现这一点:
您必须设置服务器,然后每当启动应用程序时,应用程序都会发送电话对服务器的唯一标识符。如果服务器没有为该电话id输入一个条目,然后创建一个新的条目并记录时间如果服务器确实有一个电话id条目,那么它会执行只需检查试用期是否已过期。然后将试用期到期检查的结果传达回您的应用这种方法不应该是可以绕过的,但确实需要设置Web服务器等等。
还有其他方法(比如将安装日期存储在某个地方),但如果用户卸载了你的应用程序,这些信息就会消失,当他重新安装时,就无法知道他以前是否安装过。
编辑:好吧,既然你想用SharedPreferences
的方式,这里有一个例子:
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.getTimeInMillis() - before.getTimeInMillis();
long days = diff / ONE_DAY;
if(days > 30) { // More than 30 days?
// Expired !!!
}
}
...
}
我还没有整理这个,但应该给你一个想法。
这里有一个很好的答案
引用原作者-snctnl
目前,大多数开发人员使用以下3种方法之一来实现这一点技术。
第一种方法很容易绕过,第一次运行应用程序将日期/时间保存到文件、数据库或共享首选项中每次你在那之后运行应用程序时,都要检查试用期是否已结束。这很容易规避,因为卸载和重新安装将允许用户有另一个试用期。
第二种方法更难规避,但仍然可以规避。使用硬编码的定时炸弹。基本上,通过这种方法,您将硬编码试用的结束日期,以及所有下载和使用该应用程序将无法同时使用该应用。我使用了这种方法,因为它易于实现大多数情况下,我只是不想经历第三种技术。用户可以通过手动更改在手机上约会,但大多数用户不会麻烦地去做这样的事情。
第三种技巧是我听说过的唯一能真正做到能够完成你想做的事情。你必须建立服务器,然后每当启动应用程序时,应用程序都会发送电话对服务器的唯一标识符。如果服务器没有为该电话id输入一个条目,然后创建一个新的条目并记录时间如果服务器确实有一个电话id条目,那么它会执行只需检查试用期是否已过期。然后将试用期到期检查的结果传达回您的应用这种方法不应该是可以绕过的,但确实需要设置Web服务器等等。
在onCreate中执行这些检查总是一种很好的做法。如果过期已结束弹出一个AlertDialog,其中包含指向应用程序的完整版本。只包括一个"OK"按钮,一旦用户点击"OK",调用"finish()"结束活动。