Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

469
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda