防止用户操纵将存储在Android本地数据库中的时间?
Posted
技术标签:
【中文标题】防止用户操纵将存储在Android本地数据库中的时间?【英文标题】:Preventing user from manipulating the time that will be stored in the local database of Android? 【发布时间】:2017-07-16 05:23:28 【问题描述】:我正在尝试制作一个员工考勤应用程序,用户(员工)可以在他们来到办公室时打卡。他们打卡的详细信息将被发送到服务器。主要集中在时间上。
我也在尝试实现离线功能。 (如果应用没有检测到互联网连接,则打卡记录将存储在本地数据库(SQLite)中,一旦检测到,将记录从数据库推送(并清除)到服务器。
我尝试使用 GregorianCalendar 类捕获时间,但时间值似乎容易受到用户操作的影响。 (特别是场景 A)
场景 A
用户可以关闭互联网连接,关闭自动数据和时间,手动设置时间,然后打开应用打卡。
示例: X 先生早上 8.45 到办公室,打开飞行模式,手动设置设备时间(比如早上 8.30),然后打卡。他设置的时间值被输入到数据库中,而不是他进入的实际时间。
如何防止这种情况发生?
场景 B
用户可以手动编辑本地数据库值(根电话)。 [我知道这是不可避免的,但有什么建议可以让他更努力吗?]
【问题讨论】:
【参考方案1】:场景 A: 解决方案 1:仅在有 Internet 连接时接受值:
private boolean haveInternet()
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
解决方案 2:ping 您的服务器以获取 timeDate。
解决方案 3:为 timechange 事件注册一个广播接收器并禁用应用程序,直到您可以 ping 您的服务器(取自此处:https://***.com/a/20766107/2540578)
场景 B:加密数据。有多种解决方案可以做到这一点,但这取决于您使用的是什么(sqlite、realm、greendao 等)
【讨论】:
离线功能是我们开发这款应用的真正原因,所以这是必须的。那么,除了解决方案 3,您还能想到什么?以上是关于防止用户操纵将存储在Android本地数据库中的时间?的主要内容,如果未能解决你的问题,请参考以下文章
Android - 应用更新后 WebView html5 本地存储不持久