我有一个应用程序只能工作 30 天或几天。
它只是一个简单的应用程序,其中播放一些音频文件,对应于显示的图像和显示的一些文本。
只有一种方法可以真正实现这一目标:
您必须设置一个服务器,然后每当您的应用程序启动时,您的应用程序就会将手机的唯一标识符发送到服务器。如果服务器没有该电话 ID 的条目,则它会创建一个新条目并记录时间。如果服务器确实有电话 id 条目,那么它会进行简单的检查以查看试用期是否已过期。然后它将试用到期检查的结果传回给您的应用程序。这种方法不应该是可以规避的,但确实需要设置网络服务器等。
还有其他方法(例如在某处存储安装日期),但是如果用户卸载您的应用程序,该信息将消失,并且当他重新安装时,无法知道他之前是否安装过。
编辑:好的,既然你想顺其自然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 条目,那么它会进行简单的检查以查看试用期是否已过期。然后它将试用到期检查的结果传回给您的应用程序。这种方法不应该是可以规避的,但确实需要设置网络服务器等。
在 onCreate 中进行这些检查总是好的做法。如果到期已结束,则会弹出一个 AlertDialog,其中包含指向应用程序完整版本的市场链接。只包含一个“OK”按钮,一旦用户点击“OK”,就调用“finish()”来结束活动。