如何使Android应用程序在固定的时间后过期?

时间:2016-03-16 11:55:20

标签: android

您好,我希望我开发的应用程序在5天后停止工作。总之,我想定时炸弹我的Android应用程序有人可以告诉我如何在android studio中以编程方式执行此操作吗?任何可能的代码适合这个? 感谢..

7 个答案:

答案 0 :(得分:1)

我使用此代码在3月26日之后过期试用版。

 String currentTime = new SimpleDateFormat("yyyyMMdd").format(Calendar.getInstance().getTime());
        Log.d("timeStamp", currentTime);
        Calendar date = new GregorianCalendar(2016, Calendar.MARCH, 26);
        date.add(Calendar.DAY_OF_WEEK, 0);
        String expireTime = new SimpleDateFormat("yyyyMMdd").format(date.getTime());

        int intcurrentTime = Integer.parseInt(currentTime);
        int intexpireTime = Integer.parseInt(expireTime);


        if(intcurrentTime == intexpireTime || intcurrentTime  > intcurrentTime  ) {

            //logic to set off the features of app
            tvJ2.setText("Trial period expired!!");
}

答案 1 :(得分:1)

使用以下方法获取第一次安装应用时的时刻:

private static long getFirstInstallTime(Context context) throws
        PackageManager.NameNotFoundException {

    PackageManager pm = context.getPackageManager();
    PackageInfo info = pm.getPackageInfo(context.getPackageName(), 0);
    return info.firstInstallTime;
}

现在,您可以计算已用时间并将其与所需的应用生存时间进行比较:

    long now = System.currentTimeMillis();
    if (now - getFirstInstallTime(getApplicationContext()) > 
                                TimeUnit.DAYS.toMillis(5)) {
        sendPoisonPill();
    }

注意:sendPoisonPill方法是你实施的'定时炸弹'

答案 2 :(得分:0)

我不明白你为什么要那样做,但无论如何,你可以用日期创建一个String并将其保存到SharedPreferences。在您的主要活动中,在执行任何操作之前,您将实际日期与您在SharedPreferences中保存的日期进行比较(保存的日期可能是第一次打开应用程序或带有前缀的日期)以及实际日期保存日期后5天或更长时间,您可以显示空白活动或任何您想要的活动。

我为你编写了一段代码,当你第一次打开应用程序时,系统会保存日期并增加5天。然后,每当您再次打开应用程序时,您将保存的日期与实际日期进行比较,如果实际日期在您保存的日期之后(这意味着它已经过了5天),您可以随心所欲地进行任何操作

class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState){
      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
      SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
      if (!prefs.getBoolean("firstRun", true) {
         SharedPreferences.Editor editor = prefs.edit();
         Calendar c = Calendar.getInstance();
         c.setTime(new Date());
         c.add(Calendar.DATE, 5);  // number of days to add
         String date = sdf.format(c.getTime());  // dt is now the new date
         editor.putBoolean("firstRun", true);
         editor.putString("valid_until", date).apply();
      }
      else if(new Date().after(sdf.parse(prefs.getString("valid_until","")))) {
         //Show whatever you want. Or finish the activity calling to finish();
      }
 }

答案 3 :(得分:0)

您可以使用AlarmManager在指定时间向您的应用发送意图。让意图处理程序关闭你的应用程序。

但请注意,根据您想要做什么,这可能不是一件好事。运行的Android应用程序(即 - 具有由内核调度的进程),打开(即 - 具有用户可以改变的视图)或活动(即 - 它是前景视图)几乎是独立状态。您需要指定要过期的内容。

答案 4 :(得分:0)

您可以使用subscription创建应用,以便在订阅过期5天后应用无效(无法启动)

答案 5 :(得分:0)

那么,

如果您知道出版物的时间,那么您可以做一些事情(愚蠢)

class MainActivity extends Activity {
    public static final long DESTROY_APP_TH = 432000000;

     @Override
     protected void onCreate(Bundle savedInstanceState){
           PackageManager pm = context.getPackageManager();
           PackageInfo pi= pm.getPackageInfo(context.getPackageName(), 0);
           long publishTimeInMilli = pi.firstInstallTime;

          long now = System.currentTimeMillis();
          if(now - publishTimeInMilli) > DESTROY_APP_TH) {
             //just finish the the activity (and thus the app) or do something else
             finish();
          }
     }

答案 6 :(得分:0)

在我的实现中,我将向SharedPreference添加1个变量。 例如 firstRun 时间戳。每次应用程序启动时,我都会获取该变量并使用应用程序的当前时间进行检查。它超过5天(您的设置),因此终止应用程序。但是,如果用户在设备中更改系统时间,这种方式无济于事。

更安全的方法是将此变量 firstRun 发送到您的服务器。每次启动时,应用程序都会请求服务器并检查服务器内的状况。

希望它有所帮助!