我的应用程序应该只能工作30天或几天。
这只是一个简单的应用程序,其中播放了一些音频文件,对应于显示一些文本的图像。
答案 0 :(得分:3)
只有一种方法可以真正实现这一目标:
你必须设置一个 服务器,然后每当您的应用程序启动时您的应用程序发送 电话服务器的唯一标识符。如果服务器没有 有一个该手机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 !!!
}
}
...
}
我没有编译这个,但应该给你一个想法。
答案 1 :(得分:1)
Here是一个非常好的答案
引用原作者 - snctnl
目前大多数开发人员使用以下3之一完成此任务 技术。
第一种方法很容易被绕开,第一次运行时 应用程序将日期/时间保存到文件,数据库或共享首选项和 每次运行应用程序后,检查是否试用期 结束了。这很容易规避,因为卸载和 重新安装将允许用户有另一个试用期。
第二种方法难以规避,但仍然可以绕过。 使用硬编码定时炸弹。基本上你会采用这种方法 硬编码试用的结束日期,以及下载和的所有用户 使用该应用程序将停止能够同时使用该应用程序。一世 使用这种方法,因为它易于实现和 大多数情况下,我只是不想经历的麻烦 第三种技术。用户可以通过手动更改来避免这种情况 在他们的手机上约会,但大多数用户不会经历麻烦 这样的事情。
第三种技术是我真正听说过的唯一方法 能够完成你想做的事。你将不得不设置一个 服务器,然后每当您的应用程序启动时您的应用程序发送 电话服务器的唯一标识符。如果服务器没有 有一个该手机ID的条目,然后它创建一个新的并注意到 时间。如果服务器确实有一个电话ID的条目,那么它会 简单检查一下试用期是否已经过期。然后呢 将试用期限检查的结果传回给您 应用。这种方法不应该是可以绕过的,但确实如此 需要建立一个网络服务器等。
在onCreate中执行这些检查始终是一种好习惯。如果 到期已经结束弹出一个AlertDialog与市场链接 完整版的应用程序。只包括一个“确定”按钮,并且一次 用户点击“确定”调用“结束()”以结束活动。