如何让Android应用程序只在一段试用期内工作
我有一个申请,应该只工作30天或几天如何让Android应用程序只在一段试用期内工作,android,trialware,Android,Trialware,我有一个申请,应该只工作30天或几天 这只是一个简单的应用程序,它有一些音频文件播放,对应于显示的图像和显示的文本。只有一种方法可以真正实现这一点: 你必须建立一个 服务器,然后无论何时启动应用程序,应用程序都会发送 电话是服务器的唯一标识符。如果服务器没有 为该手机id创建一个条目,然后它创建一个新的条目并记录 时间如果服务器确实有一个电话id条目,那么它会执行 只需检查试用期是否已过期。那么 将试用期满检查的结果反馈给您的 应用这种方法不应该是可以绕过的,但确实可以 需要设置Web服务器等
这只是一个简单的应用程序,它有一些音频文件播放,对应于显示的图像和显示的文本。只有一种方法可以真正实现这一点: 你必须建立一个 服务器,然后无论何时启动应用程序,应用程序都会发送 电话是服务器的唯一标识符。如果服务器没有 为该手机id创建一个条目,然后它创建一个新的条目并记录 时间如果服务器确实有一个电话id条目,那么它会执行 只需检查试用期是否已过期。那么 将试用期满检查的结果反馈给您的 应用这种方法不应该是可以绕过的,但确实可以 需要设置Web服务器等 还有其他方法(比如在某处存储安装日期),但若用户卸载了你们的应用程序,那个么这些信息就会消失,当他重新安装时,就无法知道他以前是否安装过 编辑: 好的,既然您想使用
SharedReferences
方式,下面是一个示例:
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 !!!
}
}
...
}
我还没有编译过这篇文章,但应该会给你一个想法。要真正做到这一点,只有一种方法: 你必须建立一个 服务器,然后无论何时启动应用程序,应用程序都会发送 电话是服务器的唯一标识符。如果服务器没有 为该手机id创建一个条目,然后它创建一个新的条目并记录 时间如果服务器确实有一个电话id条目,那么它会执行 只需检查试用期是否已过期。那么 将试用期满检查的结果反馈给您的 应用这种方法不应该是可以绕过的,但确实可以 需要设置Web服务器等 还有其他方法(比如在某处存储安装日期),但若用户卸载了你们的应用程序,那个么这些信息就会消失,当他重新安装时,就无法知道他以前是否安装过 编辑: 好的,既然您想使用
SharedReferences
方式,下面是一个示例:
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 !!!
}
}
...
}
我还没有编译过这个,但应该会给你一个想法。是一个很好的答案
引用原作者的话-
目前,大多数开发人员使用以下3种方法之一来完成此任务
技术
第一种方法很容易避免,第一次运行
应用程序将日期/时间保存到文件、数据库或共享首选项,并
每次运行应用程序后,请检查试用期
结束了。这很容易避免,因为卸载和
重新安装将允许用户有另一个试用期
第二种方法更难规避,但仍然可以规避。
使用硬编码的定时炸弹。基本上,通过这种方法,您将
硬编码试验的结束日期,以及所有下载和
使用该应用程序将停止同时使用该应用程序。我
我们之所以使用这种方法,是因为它易于实现,并且适用于
大多数情况下,我只是不想经历这个世界的麻烦
第三种技术。用户可以通过手动更改
在他们的手机上约会,但大多数用户不会费事去做
这样的事情
第三种方法是我听说的唯一一种真正的方法
能够完成你想做的事情。你必须建立一个
服务器,然后无论何时启动应用程序,应用程序都会发送
电话是服务器的唯一标识符。如果服务器没有
为该手机id创建一个条目,然后它创建一个新的条目并记录
时间如果服务器确实有一个电话id条目,那么它会执行
只需检查试用期是否已过期。那么
将试用期满检查的结果反馈给您的
应用这种方法不应该是可以绕过的,但确实可以
需要设置Web服务器等
在onCreate中执行这些检查始终是一种良好的做法。如果
过期已结束,弹出一个带有市场链接的AlertDialog,指向
应用程序的完整版本。仅包括一个“确定”按钮,一旦
用户单击“确定”调用“finish()”以结束活动
这是一个很好的答案
引用原作者的话-
目前,大多数开发人员使用以下3种方法之一来完成此任务
技术
第一种方法很容易避免,第一次运行
应用程序将日期/时间保存到文件、数据库或共享首选项,并
每次运行应用程序后,请检查试用期
结束了。这很容易避免,因为卸载和
重新安装将允许用户有另一个试用期
第二种方法更难规避,但仍然可以规避。
使用硬编码的定时炸弹。基本上,通过这种方法,您将
硬编码试验的结束日期,以及所有下载和
使用该应用程序将停止同时使用该应用程序。我
我们之所以使用这种方法,是因为它易于实现,并且适用于
大多数情况下,我只是不想经历这个世界的麻烦
第三种技术。用户可以通过手动更改
在他们的手机上约会,但大多数用户不会费事去做
这样的事情
第三种方法是我听说的唯一一种真正的方法
能够完成你想做的事情。你必须建立一个
服务器,然后无论何时启动应用程序,应用程序都会发送
电话是服务器的唯一标识符。如果服务器没有
为该手机id创建一个条目,然后它创建一个新的条目并记录
时间如果服务器确实有一个电话id条目,那么它会执行
只需检查试用期是否已过期。那么
将试用期满检查结果反馈给y