0

我有一个应用程序只能工作 30 天或几天。

它只是一个简单的应用程序,其中播放一些音频文件,对应于显示的图像和显示的一些文本。

4

2 回答 2

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 !!!
        }
    }

    ...
}

我还没有编译这个,但应该给你一个想法。

于 2012-02-02T14:31:29.843 回答
1

是一个很好的答案

引用原作者 - snctnl

目前,大多数开发人员使用以下 3 种技术之一来完成此操作。

第一种方法很容易绕过,第一次运行应用程序时将日期/时间保存到文件、数据库或共享首选项中,然后每次运行应用程序时检查试用期是否结束。这很容易规避,因为卸载和重新安装将允许用户有另一个试用期。

第二种方法更难规避,但仍然可以规避。使用硬编码的定时炸弹。基本上,使用这种方法,您将硬编码试用的结束日期,并且所有下载和使用该应用程序的用户将无法同时使用该应用程序。我使用这种方法是因为它很容易实现,而且在大多数情况下,我只是不想经历第三种技术的麻烦。用户可以通过手动更改手机上的日期来规避这种情况,但大多数用户不会费心去做这样的事情。

第三种技术是我听说过的唯一能够真正完成你想做的事情的方法。您必须设置一个服务器,然后每当您的应用程序启动时,您的应用程序就会将手机的唯一标识符发送到服务器。如果服务器没有该电话 ID 的条目,则它会创建一个新条目并记录时间。如果服务器确实有电话 id 条目,那么它会进行简单的检查以查看试用期是否已过期。然后它将试用到期检查的结果传回给您的应用程序。这种方法不应该是可以规避的,但确实需要设置网络服务器等。

在 onCreate 中进行这些检查总是好的做法。如果到期已结束,则会弹出一个 AlertDialog,其中包含指向应用程序完整版本的市场链接。只包含一个“OK”按钮,一旦用户点击“OK”,就调用“finish()”来结束活动。

于 2012-02-02T17:21:49.150 回答