¿Cómo evito que Android tome una captura de pantalla cuando mi aplicación va al fondo?
La aplicación que estoy construyendo actualmente tiene el requisito de que la aplicación tiene que impedir que el sistema operativo tome una captura de pantalla de la aplicación cuando se está introduciendo en segundo plano por razones de seguridad. De esta forma, no podrá ver la última pantalla activa al cambiar entre aplicaciones.
Estoy planeando poner esta funcionalidad en el método onPause de la clase de aplicación, pero primero tengo que averiguar cómo puedo lograr esta funcionalidad.
- Seguridad de facturación InApp y invocación de métodos remotos
- Uso de software / hardware con respaldo Android Keystore y posibles desventajas de seguridad / usabilidad
- Cómo entregar el código de la aplicación de Android a otro desarrollador: administración de la gestión de claves
- Hacer un IAP válido para diferentes aplicaciones
- Java.lang.SecurityException: Permiso Denial: Intención inicial {act = android.intent.action.MAIN cat =
Así que hay alguien por ahí, que tiene una pista de cómo arreglar esto?
- Almacenamiento de claves en Android
- ¿Cómo el software anti-virus escanea programaticamente las aplicaciones Android instaladas (sin privilegios de root)?
- ¿Cómo puedo usar el Desbloqueo facial de Android en mi aplicación privada?
- AndroidKeyStore eliminado después del cambio de contraseña del dispositivo
- DevicePolicyManager wipeData no borrar la configuración de correo electrónico
- ¿Dónde almacenar la información global sensible, como las claves API en la aplicación de Android?
- ¿Cómo evitar la ingeniería inversa de un archivo APK?
- Android - Tiempo de vida de las diferentes opciones de almacenamiento
Prueba FLAG_SECURE
:
public class FlagSecureTestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); setContentView(R.layout.main); } }
Esto definitivamente se asegura contra capturas de pantalla manuales y capturas de pantalla automáticas de la historia de tareas recientes de ICS.
UPDATE : también protege contra Now On Tap u otros asistentes en Android 6.0; No obtendrán acceso a los detalles de widgets y contenedores en su interfaz de usuario si el usuario muestra el asistente.
UPDATE # 2 : sin embargo, no todo en la actividad estará protegido. Cualquier ventana emergente – Dialog
, Spinner
, AutoCompleteTextView
, desbordamiento de la barra de acción, etc. – será insegura. Puede solucionar el problema del getWindow()
Dialog
llamando a getWindow()
en él y estableciendo FLAG_SECURE
. El resto … se pone complicado. Vea esta entrada del blog para más información.
Tenga cuidado con el uso de WindowManager.LayoutParams.FLAG_SECURE, en algunos dispositivos (verificados en Samsung Galaxy ACE, por ejemplo GT-S5830) esto hará que la vista codificada. Parece un bicho específico de Samsung. Recomiendo lo siguiente:
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); }
Esto es lo que parece una pantalla revuelta:
Esto está funcionando correctamente en los teléfonos de ICS Samsung sin embargo, así que estoy asumiendo que el problema es aislado a los dispositivos del pan de jengibre (o más viejos).
La solución proporcionada por CommonsWare sigue siendo válida también en Lollipop.
Solo una nota, si quieres seguir sin ver las instantáneas en la lista reciente de toda la aplicación, TODAS las actividades implementadas deben especificar en el método onCreate()
el indicador getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
Antes de setContentView();
De lo contrario, una instantánea en la lista reciente mostrará la primera actividad sin el indicador si el usuario lo navega.
- ¿Cómo puedo encontrar y ejecutar el keytool
- La clave debe ser un identificador de recurso específico de la aplicación