如何防止用户更改系统日期/时间(在 Android 中)?
Posted
技术标签:
【中文标题】如何防止用户更改系统日期/时间(在 Android 中)?【英文标题】:How to prevent user changing system date/time (in Android)? 【发布时间】:2012-10-07 05:26:50 【问题描述】:我已经用谷歌搜索了,但我找不到阻止用户在 android 中更改系统日期/时间的建议。
我们正在开发企业应用程序,我们希望阻止设备用户设置时间设置。换句话说,我们想设置一个策略来定义,用户不能在 android 设备中更改日期和时间。 有什么建议可以做到这一点吗? 谢谢。
【问题讨论】:
我确定这是不可能的。您可以使用广播接收器在用户更改时间时收到通知,然后根据您的计算做任何您想做的事情。当您的用户看到由于您的应用程序而无法更改时间时,我认为这对您的用户来说不是很好的体验。 我怀疑这是可能的。电话的首要任务是正确接听电话和短信,其次是时间和日期等基本信息。应用不应阻止任何这些功能。 你们没有抓住重点:这是一个企业应用程序。这意味着有一个准确的时间很重要:您可能需要知道确切电子邮件何时发送,或根据时间验证证书。优先级取决于使用情况。 【参考方案1】:这是第三种可以显着节省电池寿命的替代方案:
在用户更改时间时注册广播接收器。然后禁用该应用程序,直到根据网络时间或服务器时间检查设备时间。
那些广播接收器存在。我现在刚刚在 Google Play 上找到了这个名为 Internal Broadcast Monitor 的应用程序。
下面是有趣的部分,我更改了时间和日期:
下面是我更改时区的部分: 。
【讨论】:
如果用户关闭应用服务然后更改设备时间,这将不起作用。 @user3782779,广播接收器不需要运行服务。这就是重点。 那么,即使在我的进程中,我是否可以在广播接收器中运行一段代码并且我的服务被杀死了? 在广播接收器内部,是的,但前提是它是一个可以立即返回的快速操作。常见的模式是创建一个服务或活动,并在广播接收器被触发时由广播接收器启动。是的,实际上这是推荐的做事方式,而不是长期服务。使用广播接收器或警报管理器根据需要启动/重新启动您的服务,而不是使用长期服务。【参考方案2】:由于设备管理员框架中没有对此的策略支持,因此您不能。提交功能请求,它可能会在下一个版本中添加。
【讨论】:
谢谢,我发现我可以通过阻止用户访问 android 中的日期/时间设置活动来阻止用户更改日期/时间设置。 你是怎么做到的?无论您拥有什么,它都不太可能在所有 Android 版本上可靠运行,尤其是最近的版本。 我使用活动管理器检查正在运行的活动。因此,如果用户选择日期/时间设置活动,我可以调用另一个活动。【参考方案3】:我不知道有什么方法可以更改设备的默认行为。 但是,如果系统时间与网络时间不同,您可以阻止应用程序运行。或者您可以在您的应用中使用网络时间而不是系统时间。
这个帖子的答案解释了如何访问网络时间。
How can I get the "network" time, (from the "Automatic" setting called "Use network-provided values"), NOT the time on the phone?
【讨论】:
【参考方案4】:您可以在应用程序启动时将当前时间保存到db,如果当前时间不等于db time+60,则每1分钟检查一次,将系统时间设置为db time+60。
【讨论】:
以上是关于如何防止用户更改系统日期/时间(在 Android 中)?的主要内容,如果未能解决你的问题,请参考以下文章
android:TimePickerDialog 防止用户选择过去的时间,并可以选择未来的时间与新的日期