防止用户操纵将存储在Android本地数据库中的时间



我正在尝试制作一个员工出勤应用程序,用户(员工)可以在来到办公室时打入。他们冲入的详细信息将发送到服务器。主要关注时间。

我也试图实现离线功能。(如果该应用程序未检测到Internet连接性,则打孔记录将存储在本地DB(SQLITE)上,一旦它确实将记录从DB(并将其清除)推到服务器上。

我尝试使用 gregoriancalendar 类捕获时间,但是时间值似乎很容易受到用户操作的影响。(尤其是场景a)

方案A

用户可以关闭Internet连接,转动自动数据&Time 关闭,手动设置时间,然后打开应用以打入。

示例: X先生于上午8.45上任,打开飞机模式,手动设置设备时间(例如8.30am),然后打入记录。他设置的时间值将输入到DB中,而不是他进来的实际时间。

如何防止这种情况发生?

方案B

用户只能手动编辑本地DB值(扎根电话)。[我知道这是不可避免的,但是有什么建议是使他更难吗?]

方案a:解决方案1:仅在有互联网连接时接受值:

private boolean haveInternet()
{
     ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

解决方案2:ping hour for the the the the the the the -p.

解决方案3:为TimeChange事件注册广播接收器,并禁用应用程序,直到您可以使用服务器为止(从此处获取:https://stackoverflow.com/a/20766107/2540578)

方案B:加密数据。有多种解决方案可以做到这一点,但这取决于您使用的东西(SQLite,Realm,Greendao等)

最新更新