Cómo capturar capturas de pantalla en la aplicación en Android | Autor Siva Ganesh Kantamani | Agosto de 2021
echar un vistazo getDrawingCache and
Implementación de API PixelCopy
En este artículo, aprenderemos sobre un método de captura de pantalla ampliamente utilizado y resolveremos su problema en tiempo real. Luego, explore una solución simple, usando lienzo para tomar capturas de pantalla basadas en vistas.
Para las aplicaciones móviles, uno de los usos comunes de las capturas de pantalla es brindar una mejor atención al cliente. Por lo general, necesitamos capturas de pantalla más frecuentes para comprender mejor los antecedentes de los problemas que experimentan los usuarios.
Además de ofrecer mejores servicios, las capturas de pantalla también se utilizan para muchos propósitos, como compartir sus preguntas en la pantalla cuando hay aplicaciones de tecnología educativa involucradas o enviar una lista de artículos de compra preseleccionados desde una aplicación de comercio electrónico a su familia.
Recientemente comencé a buscar una solución perfecta para capturar capturas de pantalla en la aplicación. He encontrado más de unas pocas soluciones, pero la mayoría de ellas no funcionan en dispositivos con diferentes versiones de Android o sistemas operativos personalizados. Pero finalmente encontré una solución, que no implica métodos obsoletos y funciona perfectamente con la API de Android Canvas.
Sin más preámbulos, comencemos:
getDrawingCache
Es una función en la clase de vista y su tipo de retorno es un mapa de bits sin zoom que representa la vista. Si el almacenamiento en caché está deshabilitado, devuelve un valor nulo.. Eche un vistazo al código:
Básicamente, es una función de extensión en la clase de vista.Primero, creamos un archivo con un nombre único por fecha y luego pasamos getDrawingCache
. Una vez que tenemos el mapa de bits y el archivo, usamos saveFile
La función de extensión que creé para guardar archivos.echar un vistazo saveFile
Función:
Esto funciona perfectamente, pero tiene dos desventajas:
- No funciona en dispositivos con Android 8 y superior.
- Si el almacenamiento en caché está deshabilitado en la vista, el tipo de retorno será nulo y los casos de uso en tiempo real pueden deshabilitar el almacenamiento en caché en la vista web.
Una solución que veo que la mayoría de la gente recomienda es la API PixelCopy. Es bastante fácil de usar y funciona la mayor parte del tiempo. Eche un vistazo al código:
Primero, creamos un mapa de bits vacío con el tamaño de la vista, luego colocamos la vista en la pantalla y comenzamos a copiar píxeles en el mapa de bits. Aquí vamos a pasar una función de Kotlin que toma un mapa de bits como parámetro de entrada. Esta función de Kotlin se utiliza para guardar el mapa de bits en un archivo. Echar un vistazo:
La API PixelCopy hace un trabajo bastante bueno, pero descubrí que no funciona en muchos casos. Entonces necesitaba otra solución estándar, lo que me llevó a la siguiente solución.
Cuando encontré una solución basada en lienzo, quedé muy satisfecho. La clase Canvas contiene llamadas «dibujar». Para dibujar algo, necesita cuatro componentes básicos: un mapa de bits para contener píxeles, un lienzo para contener llamadas de dibujo (escribir en mapa de bits), una primitiva de dibujo (por ejemplo, rectángulo, ruta, texto, mapa de bits) y un dibujo (para describir la color y estilo del dibujo).
Primero, necesitamos crear un mapa de bits basado en el tamaño de la vista. Entonces, la lógica aquí es bastante simple, usamos lienzo y funciones de dibujo en la vista para crear un mapa de bits. Eche un vistazo al código:
En lo que a mí respecta, esto funciona como un encanto, sin ningún sistema operativo o restricciones basadas en vistas. Si encuentra algún problema, agréguelo en los comentarios para que podamos mejorar la solución juntos.
Recientemente vi este excelente artículo sobre Jetpack View Binding de Satya Pavan Kantamani. muy recomendable: