Programando una aplicación para Android, puede ser interesante realizar una captura de pantalla por código, ya sea para guardarla en la memoria o para crear algún efecto en alguna actividad, manteniendo esta captura como fondo de la actividad, por ejemplo.
Para capturar la pantalla por código en Android, se puede llamar a la siguiente función, desde una actividad.
private Bitmap takeScreenshot() { try { // crear un bitmap con la captura de pantalla View v1 = getWindow().getDecorView().getRootView(); v1.setDrawingCacheEnabled(true); Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache()); v1.setDrawingCacheEnabled(false); return bitmap } catch (Throwable e) { // Several error may come out with file handling or OOM e.printStackTrace(); } }
Con esta función ya se obtiene la captura de pantalla en un objeto de tipo Bitmap. Si se quiere guardar la captura en un fichero, lo primero sería dar permisos de escritura en la memoria donde se quiera guardar. En este ejemplo, se guardaría en la memoria externa.
Para guardar la captura de pantalla, bastaría con llamar a la siguiente función, pasando como parámetro el Bitmap que devuelve la función que obtiene la captura.
private void saveScreenshot(Bitmap bitmap) { Date now = new Date(); android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now); try { // nombre y ruta de la imagen a incluir String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg"; File imageFile = new File(mPath); FileOutputStream outputStream = new FileOutputStream(imageFile); int quality = 100; bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream); outputStream.flush(); outputStream.close(); } catch (Throwable e) { // Captura los distintos errores que puedan surgir e.printStackTrace(); } }
Una vez guardado, si además se quiere abrir en el dispositivo Android la captura de pantalla que se acaba de crear, se podría llamar a la siguiente función, la cual recibe como único parámetro la variable de tipo File llamada image File que se ha creado en la función anterior.
private void openScreenshot(File imageFile) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri uri = Uri.fromFile(imageFile); intent.setDataAndType(uri, "image/*"); startActivity(intent); }