您好,我希望我开发的应用程序在5天后停止工作。总之,我想定时炸弹我的Android应用程序有人可以告诉我如何在android studio中以编程方式执行此操作吗?任何可能的代码适合这个? 感谢..
答案 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 发送到您的服务器。每次启动时,应用程序都会请求服务器并检查服务器内的状况。
希望它有所帮助!