Mi aplicación tiene información de usuario sensible y debemos implementar una pantalla de código de acceso para mostrarla cada vez que el usuario abre la aplicación. Aquí están los dos enfoques que intenté después de leer this post.Implementar bloqueo de contraseña para la aplicación Android
utilizar una variable estática y restablecerla en
onStop()
de cada actividad y comprobar de nuevo en elonStart()
de cada actividad y mostrar la pantalla de código de acceso si el tiempo cruzó un umbral mínimo decir 1-2 segundos. El problema con este enfoque es que mi aplicación también utiliza intenciones para llamar a escáneres de cámaras y códigos de barras y los usuarios pueden pasar períodos más largos en estas aplicaciones externas. Puedo aumentar el umbral en este caso pero complica los cálculos y no es una solución muy buena.Probé la otra aproximación utilizando este método.
protected boolean isAppOnForeground(final Context context) { List<RunningAppProcessInfo> appProcesses = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses(); if (appProcesses == null) { return false; } final String packageName = context.getPackageName(); for (RunningAppProcessInfo appProcess : appProcesses) { if ((appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) && appProcess.processName.equals(packageName)) { return true; } } return false; }
Pero esto siempre devolverá cierto cuando puedo comprobar que en el método onStart de cada actividad ya que el proceso ya iniciado por el tiempo que está en onStart
¿Hay algún otro enfoque que ¿Puedo mostrar una contraseña cuando el usuario abre la aplicación? Debería mostrarse incluso cuando el usuario haga clic en la pantalla de inicio para salir de la aplicación y luego vuelva a la aplicación desde aplicaciones recientes.
no estoy seguro, pero si puede hacer un servicio y cada uno dice 1 o 2 segundos llame antes, y cambie una variable a verdadero/falso, y en actividad en hoja de vida, simplemente verifique verdadero/falso – Amit
Para # 1, qué sobre una cadena de tipo de cookie/sesión UNIFORMIZADA y almacenada almacenada en una * SharedPreference * privada - puede establecer el tiempo de espera por unos minutos y esto podría permitir a los usuarios salir y regresar a su aplicación. – pjco
Otra posible solución es convertirse en administrador del dispositivo para utilizar el bloqueo del dispositivo en lugar de un bloqueo de pin personalizado de la aplicación. esto puede ser mejor o peor dependiendo de cómo lo mires. si tiene muchas aplicaciones que requieren seguridad, se trata de un bloqueo único para todas las aplicaciones. si solo tiene una aplicación, los usuarios se molestan porque su aplicación les obliga a tener una pantalla de bloqueo. –