我目前正在尝试实现类似Whatsapp的功能,该功能显示了在特定时间内不更新whatsapp的自定义活动。
我搜索了stackoverflow,发现了类似的question。但是提供的代码似乎无法正常工作。有任何适合的代码吗?
这是我到目前为止尝试过的
public class MainActivity extends AppCompatActivity {
public static final long CLOSE_APP = 432000000;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PackageManager pm = context.getPackageManager();
PackageInfo pi= null;
try {
pi = pm.getPackageInfo(context.getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
long publishTimeInMilli = pi.firstInstallTime;
long now = System.currentTimeMillis();
if(now - publishTimeInMilli) > CLOSE_APP) {
finishAffinity();
}
}
和此代码
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","")))) {
finishAffinity();
}
使用此代码时,出现错误不兼容的类型:所需的布尔值很长。
答案 0 :(得分:0)
您可以看看Shared Preferences。您可以将当前版本以及首次找到该版本的日期保存到“共享首选项”中,然后将它们与实际值进行比较。如果版本增加,则可以更新这些值。如果不是,则可以从中计算出旧版本的安装时间。希望这就是您想知道的。
答案 1 :(得分:0)
您可以设置计时器并在后台运行该计时器,为此使用服务,而在此服务运行时,用户尝试打开您的应用,然后仅调用finish方法。 finish方法会自动破坏您的活动,因此不允许用户打开您的应用程序。计时器结束后,您可以允许用户打开它。
答案 2 :(得分:0)
您可以尝试此方法。我写了一点程序,启动了程序,一切都很好)) 30天后,您的程序将在启动后关闭
public class MainActivity extends AppCompatActivity {
public static final String MyPREFERENCES = "MyPrefs" ;
public static int demodays = 0;
public static int finishdate = 0;
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (demodays == 0){
DateFormat df = new SimpleDateFormat("D");
String data = df.format(Calendar.getInstance().getTime());
demodays = Integer.parseInt(data);
finishdate = demodays + 30;
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putInt("data", demodays);
editor.putInt("finishdata", finishdate);
editor.apply();
}
DateFormat df = new SimpleDateFormat("D");
String today = df.format(Calendar.getInstance().getTime());
int today1 = Integer.parseInt(today);
if (today1 == finishdate) {
Toast toast = Toast.makeText(getApplicationContext(),
"Period of trial has finished", Toast.LENGTH_SHORT);
toast.show();
this.finish();
}
}
}
答案 3 :(得分:0)
此行中有错误-> if(now - publishTimeInMilli) > CLOSE_APP)
。应该是if((now - publishTimeInMilli) > CLOSE_APP)