Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

471
Views
Android: personalización de la miniatura de aplicaciones recientes (captura de pantalla predeterminada)

La aplicación en la que estoy trabajando muestra información confidencial que no debe mostrarse en la pantalla "Tareas recientes" al detener la aplicación presionando el botón de inicio.

Me gustaría difuminar los datos confidenciales en la captura de pantalla o mostrar el logotipo de la aplicación en su lugar .

Conozco los siguientes enfoques, pero no se ajustan a mis requisitos:

  • Establecer el android:excludeFromRecents de la actividad en verdadero en el manifiesto evita que la aplicación se muestre en absoluto en las tareas recientes. Esto interrumpiría la experiencia del usuario.
  • Usar FLAG_SECURE da como resultado una tarjeta en blanco en la pantalla de tareas recientes. ( ¿Cómo evito que Android tome una captura de pantalla cuando mi aplicación pasa a segundo plano? ) No me gusta la pantalla en blanco. Sin embargo, me apegaré a esta solución si no hay solución.
  • onCreateThumbnail parece la solución ideal pero, desafortunadamente, no funciona, ya que actualmente el sistema operativo no lo invoca :( ( https://code.google.com/p/android/issues/detail?id=29370 )

Y luego hay algunas soluciones que probé pero que no funcionaron como esperaba:

  • Inicie una nueva actividad que muestre el logotipo de la aplicación en onPause para que se muestre su captura de pantalla en lugar de la actividad real. Pero la nueva actividad tarda demasiado en abrirse e interrumpe la experiencia del usuario.
  • Establezca la vista de contenido de la actividad en una imagen del logotipo de la aplicación en onPause . Eso me pareció una gran solución. Desafortunadamente, la captura de pantalla de la pantalla de tareas recientes se toma en un momento no especificado. Durante la prueba, el logotipo de la aplicación aparece rápidamente antes de que se cierre la aplicación al presionar "Inicio", pero la captura de pantalla resultante muestra la actividad un poco antes.
  • Eliminar los datos confidenciales de los widgets (por ejemplo textView.setText("") ) tiene el mismo problema de tiempo de captura de pantalla que se acaba de mencionar.

¿Alguna idea o solución alternativa a las soluciones enumeradas?

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Investigué esto hace un par de meses con el mismo propósito que tú.

Desafortunadamente, tuve que concluir que simplemente no es posible. Busqué en el código fuente de Android y lo confirmé.

  • No hay devoluciones de llamada o métodos de Android que le permitan personalizarlo (eso funciona de todos modos). Además de FLAG_SECURE , esta parte del código no acepta ninguna entrada o cambio.
  • OnPause y métodos de ciclo de vida similares se llaman demasiado tarde (la captura de pantalla ya se tomó). Todos los métodos del ciclo de vida que insinuarían que está a punto de pasar al segundo plano se ejecutan demasiado tarde.
  • La imagen que ve en las tareas recientes es una captura de pantalla real y, por lo tanto, no se ve afectada por los cambios que hace (demasiado tarde) en su vista. Eso significa que no puede modificar su vista justo a tiempo (como hacerla invisible, reemplazarla con otra cosa, agregar SECURE_FLAG o cualquier otra obstrucción de la vista). Aparte, estas imágenes se pueden encontrar en un emulador en /data/system_ce/0/recent_images .
  • La única excepción es usar FLAG_SECURE , que evitará que se tome la captura de pantalla de su aplicación. Experimenté configurando esta BANDERA en onPause y eliminándola en onResume , sin embargo, como ya se mencionó, estos métodos de ciclo de vida se ejecutan después de que ya se tomó la captura de pantalla y, por lo tanto, no tuvieron ningún efecto.

Como se discutió en ¿Cómo cambiar la instantánea que se muestra en la lista de aplicaciones recientes? solía haber una devolución de llamada que podía usar para personalizar la miniatura: onCreateThumbnail . Sin embargo, esto no funciona y nunca se llama. Para ser claros, la devolución de llamada todavía está allí, simplemente el sistema operativo nunca la llama. El hecho de que dejó de funcionar está mal documentado, pero aparentemente quedó obsoleto/eliminado en silencio en 4.0.3

En cuanto a la miniatura en sí, es una captura de pantalla tomada en el servidor. Se toma antes de que se llame a onPause (o, de hecho, antes de que se llame cualquier devolución de llamada que indique que su actividad está a punto de pasar a un segundo plano).

Cuando su aplicación pasa a un segundo plano, su vista real está animada (para obtener esa transición de alejamiento). Esa animación puede verse afectada por los cambios que haces en onPause (si eres lo suficientemente rápido) (experimenté con establecer la opacidad en 0 en la ventana, entre otras cosas). Sin embargo, esto solo afectará a la animación. Cuando finaliza la animación, la vista se reemplaza por la captura de pantalla tomada anteriormente.

También vea estas preguntas que discuten esto:

  • ¿Cuándo toma Android la captura de pantalla de su conmutador de aplicaciones reciente?
  • Mostrar imagen de aplicación personalizada en el administrador de tareas en ICS o JB
  • Android nunca llama al método onCreateThumbnail
about 4 years ago · Santiago Trujillo Report

0

¿Qué tal implementar una superposición de diseño encima de toda su actividad?

Hágalo transparente, se hace clic de forma predeterminada, por lo que no tiene un impacto negativo en UX mientras está en uso.

En onPause() , establezca una imagen semitransparente y borrosa como fondo de ese diseño, los datos se codificarán detrás de ella. En onResume() cambie el fondo a completamente transparente nuevamente. Voilá.

Puede ser más rápido que otros tipos de superposiciones. El efecto secundario positivo es que, si eliminas el desenfoque como un efecto de animación breve cuando el usuario regresa ( con una biblioteca adecuada que usa C++ en lugar de Java ), incluso podría verse genial y a los usuarios ni siquiera les importaría verlo.

No lo he probado yo mismo, pero es algo que tú aún no has probado.

about 4 years ago · Santiago Trujillo Report

0

Actualmente (28/10/2020) es imposible personalizar la miniatura de la aplicación en la pantalla de aplicaciones recientes.
Como explicó @Dellkan en la respuesta anterior, el sistema operativo ya no llama al método onCreateThumbnail .

Desafortunadamente, tampoco funciona la sugerencia de crear una especie de pantalla de inicio/splash sin el indicador FLAG_SECURE para permitir que la aplicación tome una captura de pantalla de esa actividad , porque la captura de pantalla se toma en la actividad que ves y no en el inicio de la aplicación. .

Ni siquiera puede personalizar el color del fondo de la ventana cuando usa FLAG_SECURE como se informa aquí .

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!