android drawable sd-card android-image android-button

Guarda la imagen en sdcard desde un recurso dibujable en Android



drawable sd-card (2)

Me pregunto cómo guardar una imagen en la tarjeta SD del usuario a través de un botón. ¿Podría alguien mostrarme cómo hacerlo? La imagen está en formato .png y se almacena en el directorio dibujable. Quiero programar un botón para guardar esa imagen en la tarjeta SD del usuario.


Creo que no hay una solución real para esa pregunta, la única forma de hacerlo es copiar y lanzar desde el directorio de caché sd_card de esta manera:

Bitmap bm = BitmapFactory.decodeResource(getResources(), resourceId); File f = new File(getExternalCacheDir()+"/image.png"); try { FileOutputStream outStream = new FileOutputStream(f); bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); outStream.flush(); outStream.close(); } catch (Exception e) { throw new RuntimeException(e); } Intent intent = new Intent(); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(f), "image/png"); startActivity(intent); // NOT WORKING SOLUTION // Uri path = Uri.parse("android.resource://" + getPackageName() + "/" + resourceId); // Intent intent = new Intent(); // intent.setAction(android.content.Intent.ACTION_VIEW); // intent.setDataAndType(path, "image/png"); // startActivity(intent);


El proceso para guardar un archivo (que es una imagen en su caso) se describe aquí: save-file-to-sd-card

Guardando imagen en sdcard desde el recurso drawble:

Digamos que tienes una imagen, concretamente ic_launcher en tu dibujo. A continuación, obtenga un objeto de mapa de bits de esta imagen como:

Bitmap bm = BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher);

La ruta a la tarjeta SD se puede recuperar usando:

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();

A continuación, guarde en sdcard con un clic del botón usando:

File file = new File(extStorageDirectory, "ic_launcher.PNG"); FileOutputStream outStream = new FileOutputStream(file); bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); outStream.flush(); outStream.close();

No olvide agregar el permiso android.permission.WRITE_EXTERNAL_STORAGE .

Aquí está el archivo modificado para guardar desde SaveToSd : SaveToSd , un proyecto de ejemplo completo: SaveImage