Android: Cómo agregar pw / security a la configuración de hora / fecha del teléfono para evitar que el usuario lo cambie

Mi aplicación tendrá un "reloj de entrada" en la vista de lista. Cuando un usuario haga clic en ese elemento, tomará la hora / fecha del propio teléfono y enviará esos datos al servidor. Prefiero hacer esto en lugar de usar la hora del servidor, ya que si no tienen señal / recepción, no podrán registrarse. Me gustaría agregar una contraseña de seguridad a la configuración de hora / fecha para que el usuario no pueda aprovechar cambiando la hora al fichar. ¿Cómo puedo hacer que eso suceda?

Muchas Gracias

preguntado el 16 de mayo de 11 a las 17:05

Sospecho que tendrás que escribir una ROM personalizada para esto. -

¿Es esa la única manera? ¿Otra otra forma de acceder a la raíz del teléfono donde puedo modificar la seguridad de la configuración de hora / fecha? -

developer.android.com/guide/topics/admin/device-admin.html Es todo lo que obtienes por ser un administrador de dispositivos. No veo nada sobre la restricción de cambios de fecha / hora. Dicho esto, incluso si pudieras evitar que cambien el reloj, no puedes evitar que "marquen" una hora antes de que comiencen a "funcionar", ¿no? -

Pensé en una posible alternativa: consulte la sección Respuestas. -

ese es un buen punto. Pero el cliente prefiere que el usuario no pueda cambiar la hora / fecha, lo cual es mejor que darles acceso para cambiarlo. Y en cuanto a fichar antes, ese es el riesgo que están dispuestos a correr. ¿Hay un enlace que sea compatible con 1.5 ya que el teléfono es i1 motorola y no se puede actualizar y el enlace que me diste es solo para 2.2+?

3 Respuestas

Sugeriría simplemente enviar un mensaje al servidor "el usuario X quiere fichar". Y el servidor utilizará su hora local para "fichar". De esta manera, ignorará por completo la hora del dispositivo y tendrá más control sobre su infraestructura.

En general, si desea que algo sea lo más seguro posible, no lo haga en el lado del cliente (a menos que sea absolutamente necesario). Y en este caso, el usuario puede obtener root en su dispositivo y usar algo de magia de línea de comando para engañar a su servidor con una fecha / hora falsa. No es tan dificil. Y simplemente no podrá predecir todas las soluciones inteligentes de su "protección de tiempo".

contestado el 16 de mayo de 11 a las 22:05

Creo que la mejor solución es usar un servidor cuando pueda, y tomar en cuenta provisionalmente (pero registrar como no absolutamente confiable) uno o más datos del lado del cliente cuando no se pueda acceder al servidor. Una solución que funcione en la mayoría de los casos y ayude a identificar la minoría de situaciones que los humanos vivos involucrados deberían discutir debería ir bastante lejos. - Chris Stratton

si decidiera hacer el método de hora del servidor. ¿Qué puedo hacer para fichar mi entrada mientras estoy en la zona sin recepción? Si no hay recepción, ¿puedo "fichar" y almacenar los datos en el teléfono con la hora / fecha, e intentar enviar esos datos cada 10 minutos (ya que el teléfono está intentando obtener la recepción)? merrill

Revisa ConnectivityManager y su intención de transmisión CONNECTIVITY_ACTION. Se enviará cada vez que aparezca o desaparezca la conectividad. De esta manera, no necesitará sondear manualmente el estado de la conectividad. Pero tenga en cuenta que el uso puede hacer trampa mientras su dispositivo está desconectado. - inazaruk

Usando ConnectivityManager, la forma en que funciona, ¿guardaría la hora / fecha en el momento del "reloj" en el teléfono mientras está fuera de línea y tan pronto como la recepción esté disponible, enviará esos datos? ¿Lo entendí bien? - merrill

ConnectivityManager solo le notificará los cambios de conectividad, deberá administrar el time separarse. Escenario: el usuario ingresa, usted verifica la conectividad. R: tiene conectividad, envíe la solicitud "fichar". B: no tienes conectividad, espera ConnectivityManager para notificarle acerca de la conectividad, envíe la solicitud "fichar". - inazaruk

No creo que puedas hacer eso, pero puedes verificar la hora.

Cuando "ficha" también abra / proc / uptime como un archivo de texto y lea el valor allí. Creo que es en segundos. Cuando salga, vuelva a leer el valor y use la diferencia como una verificación cruzada. Si un servidor también está disponible, verifique la hora del servidor también (o informe el registro de inmediato)

Si el teléfono se bloquea o se apaga en el medio, la diferencia en el tiempo de actividad podría ser menor que la que registró a través del reloj normal. En ese caso, la diferencia en el tiempo de actividad puede ser menor que la del reloj normal (probablemente será negativo), por lo que si su fichaje se realizó sin acceso a la hora de la red, es posible que su software deba tener una forma de informar ese resultado en particular como no verificado y rastrear el número de no verificados por usuario para marcar para revisión humana si se vuelve excesivo.

Un usuario podría compilar e instalar un kernel que se basa en el tiempo de actividad, pero esa persona probablemente también podría sortear la mayoría de las otras cosas que haría usted.

contestado el 16 de mayo de 11 a las 22:05

Puede configurar un servicio para que se ejecute cada minuto (más o menos) que verifique la hora. Si el tiempo no es ~ 1 minuto después de la última comprobación, es posible que se haya cambiado. Debe confirmar con el servidor en este punto para asegurarse de que la discrepancia no fue causada por reiniciar el teléfono.

Si encuentra que se cambió la hora, puede volver a cambiarla o registrarla con su aplicación principal y marcar al "usuario" para acciones disciplinarias.

contestado el 16 de mayo de 11 a las 22:05

¿No seguirá esto despertando el teléfono del modo de suspensión y, por lo tanto, agotar la batería? 15 minutos podrían ser más razonables, 12 o 18 si tiene uno de esos sistemas de cronometraje que divide una hora en décimas. - Chris Stratton

El desarrollador tendría que probar y modificar la configuración para que sea lo más útil posible. Sin embargo, si la brecha es demasiado grande, el usuario podría potencialmente cambiar el reloj, "fichar" y luego regresar el reloj a la hora correcta dentro de la brecha entre 2 verificaciones. - Al azar

Esto suena bien, pero no creo que al cliente le gustaría que la aplicación se ejecute en segundo plano y agote la batería más de lo que se supone que debe hacer. - merrill

Si registra cada verificación, el usuario tendría que cambiar el reloj varias veces, asegurándose de configurarlo justo antes de cada vez que se ejecute el código de registro. A menos que el usuario esté escribiendo un programa para hacer esto (y si lo está, tienes más de qué preocuparte), creo que puede resultarle más fácil presentarse a trabajar. - Chris Stratton

Buen punto: es poco probable que el usuario sea preciso en sus trucos. ¡El juego está en marcha! - Al azar

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.