关于android:识别应用启动Java 30天后
Identify 30 days after the app has launched Java
如何在用户首次启动应用程序 30 天后弹出警告对话框。
我想在使用该应用程序 30 天后显示一个警报对话框,访问日历的方法有效,但是当用户使用设置更改手机日期时,该方法失败。
这个工作的空闲方式是什么?这可以使用 Sessions、Handlers 或 Runnable 方法来实现吗?
相关讨论
- 不。使用处理程序不是一个好主意。只需获取 Epoch 并将其保存在共享首选项之类的位置,然后每次检查它,如果是一个月后。
在首次启动应用程序时,获取当前纪元时间并将其保存在共享首选项中,例如 FIRST_LAUNCH_SECONDS。在每次后续启动时,检查当前纪元时间是否比 FIRST_LAUNCH_SECONDS 大 2592000 秒。 (30 天 = 2592000 秒)
在主Activity onCreate中,调用如下方法:
void showAlertAfterOneMonth(){
long currentTime = System.currentTimeMillis() / 1000; //in seconds SharedPreferences prefs = getSharedPreferences("SHARED_PREF", MODE_PRIVATE); if (isAlertShown){ // Save a flag in shared preference so that alert will be shown |
但是,如果重新安装应用程序或清除应用程序缓存,共享首选项将被清除。
更新:显然,如果用户更改系统时间,currentTimeMillis 会发生变化。如果您想要更简单的解决方案,可以使用 System.nanoTime() 而不是 System.currentTimeMillis()。
相关讨论
- 这并不能解决时间更改技巧。用户可以稍后设置时间。然后它不会在所需的时间开始。
-
哦,可以。我只是把它写成了我的程序。我获得了
System.currentTimeMillis() 并记录了它。一个月后我第二次设置时间,我在Logcat中的号码改变了一个月。去尝试一下! - 你是对的 System.nanoTime() 不会因为改变挂钟而改变。但我计算了它的起源,它只是在 4.5 小时前。
为了避免用户修改日期,您必须从时间服务器获取时间。
这篇文章会帮助你:
如何在android中从互联网上获取当前时间
因此,对于其余部分,您可以将从时间服务器获取的时间保存在您的共享首选项或此处??提到的任何其他方法中:
如何在 Android 应用中本地存储数据
然后您可以在启动应用程序时运行检查,或者,如果应用程序连续运行 30 天,您可以设置一个带睡眠的后台线程/异步任务,以便定期检查它。
可能使用 asynctask 和 while 循环不是一个好习惯,所以我会在线检查最佳解决方案。
关于user9828889的回答的评论,除了在线查看当前时间,您似乎没有其他解决办法。
相关讨论
- 你对此有何看法:我曾经安装过 Photoshop,然后当它开始我的免费试用计数时,我将时间设置得稍晚一点,因此我的免费试用期更长,但即使我没有连接到互联网,它也不起作用.
我猜您将第一天的日期保存在文件或数据库中的某个位置。为什么您不从在线时钟而不是设备中获取日期。这是一个例子:
如何让我的 java 应用程序从一些在线时钟获取全球时间
您只需将日期保存在文件中,并在用户每次打开应用程序时将其与当前时间(来自服务器)进行比较。
相关讨论
- 那么它应该是在线的。难道没有办法离线做到这一点???