2011-05-16 42 views
1

我的应用程序将在列表视图中显示'时钟输入'。当用户点击该项目时,它将从电话本身获取时间/日期并将该数据发送到服务器。我更喜欢使用服务器时间来做这件事,因为如果他们没有信号/接收他们将无法计时。我想添加密码安全性的时间/日期设置本身,因此用户将无法利用改变时钟输入的时间。我该如何做到这一点?Android:如何将pw/security添加到手机的时间/日期设置,以防止用户更改它

谢谢

+0

我怀疑你必须为此写一个自定义ROM。 – Haphazard 2011-05-16 18:01:54

+0

是唯一的方法吗?另一种方式来访问电话的根,我可以修改时间/日期设置的安全性? – merrill 2011-05-16 18:02:52

+0

http://developer.android.com/guide/topics/admin/device-admin.html你是从设备管理员那里得到的。我没有看到有关限制日期/时间更改的任何内容。也就是说,即使你可以阻止他们改变时钟,你也无法阻止他们在开始“工作”之前的一小时内“进入”时间,不是吗? – Haphazard 2011-05-16 18:06:04

回答

0

我建议只发送消息到服务器“用户X想要进入”。并且服务器将使用其当地时间用于“计时”。这样,您将完全忽略设备的时间,并更好地控制您的基础设施。一般来说,如果你想要尽可能安全的东西,不要在客户端做到这一点(除非你绝对必须)。在这种情况下,用户可能会在他的设备上获得root权限,并使用一些命令行魔术来伪造日期/时间来欺骗你的服务器。它并不难。而且你无法预测你所有的“时间保护”的智能解决方法。

+0

我认为最好的解决方案是尽可能使用服务器,并在服务器无法访问时暂时考虑客户端的一个或多个数据(但记录不完全可信)。一个解决方案在大多数情况下都有效,并且有助于确定所涉及的活人类应该讨论的少数情况,这应该会相当长。 – 2011-05-16 18:29:25

+0

如果我决定执行服务器时间方法。在没有接待处的区域,我可以做什么?如果没有接收,我可以“时钟”,并存储在与时间/日期在手机中的数据,并尝试发送的数据每10分钟(如手机试图获取接收)在'ConnectivityManager' – merrill 2011-05-16 18:38:47

+0

外观和其广播意图'CONNECTIVITY_ACTION'。它会在每次连接出现或消失时发送。这样您就不需要手动轮询连接状态。但请注意,这种使用可能会在他的设备脱机时作弊。 – inazaruk 2011-05-16 19:04:45

0

您可以设置一个服务来运行检查时间的每一分钟(左右)。如果时间不是最后一次检查后的〜1分钟,那么它可能已被更改。此时您应该向服务器确认,以确保该差异不是由重新启动手机引起的。

如果您发现时间已更改,您可以将其更改回原处或将其记录在主应用程序中,并标记“用户”以进行纪律处分。

+0

这不停地从睡眠中唤醒手机,并因此耗尽电池? 15分钟可能更合理,12或18分钟,如果你有一个计时系统将一小时分成十分之一。 – 2011-05-16 18:27:02

+0

开发人员必须测试并调整设置,使其尽可能地有用。但是,如果差距太大,用户可能会更改时钟,“时钟输入”,然后将时钟恢复到2次检查之间的间隔内的正确时间。 – Haphazard 2011-05-16 18:29:30

+0

这听起来不错,但我不认为客户希望应用程序在后台运行,并且耗尽电池超过了它该做的。 – merrill 2011-05-16 18:35:05

1

我不认为你可以这样做,但你可以交叉检查时间。

当你在“clock in”时也打开/ proc/uptime作为文本文件并在那里读取值。我相信这是在几秒钟内。当您退出时,重新读取该值并将其作为交叉检查。如果服务器也可用,请检查服务器的时间(或立即报告时钟)

如果手机崩溃或在两者之间断电,正常运行时间的差异可能会小于您记录的时间通过普通的时钟。在这种情况下,正常运行时间的差异可能会小于普通时钟(可能会为负),所以如果您的入门时间没有访问网络时间,则您的软件可能必须有办法报告特定结果,因为未验证,并跟踪每个用户未验证的数量,以便在人员评估过多时标记进行人工评估。

用户可以想象地编译和安装一个关于正常运行时间的内核,但是这个人也许可以绕过你要做的其他大部分事情。

相关问题