Thanks @ zgc7009, you set me on the right path. I used part of your code, and this is the end result for anyone who wants to solve.
The problem was that I was saving the image in the local application store.
File storedImagePath = generateImagePath("player", "png"); if (!compressAndSaveImage(storedImagePath, bitmap)) { return null; } Uri url = addImageToGallery(context.getContentResolver(), "png", storedImagePath);
Where three methods are used:
Create path
private static File getImagesDirectory() { File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + IMAGE_DIR);//Environment.getExternalStorageDirectory() if (!file.mkdirs() && !file.isDirectory()) { Log.e("mkdir", "Directory not created"); } return file; } public static File generateImagePath(String title, String imgType) { SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy-hh-mm-ss"); return new File(getImagesDirectory(), title + "_" + sdf.format(new Date()) + "." + imgType); }
Compress and save
public boolean compressAndSaveImage(File file, Bitmap bitmap) { boolean result = false; try { FileOutputStream fos = new FileOutputStream(file); if (result = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos)) { Log.w("image manager", "Compression success"); } fos.close(); } catch (IOException e) { e.printStackTrace(); } return result; }
Add to gallery
public Uri addImageToGallery(ContentResolver cr, String imgType, File filepath) { ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, "player"); values.put(MediaStore.Images.Media.DISPLAY_NAME, "player"); values.put(MediaStore.Images.Media.DESCRIPTION, ""); values.put(MediaStore.Images.Media.MIME_TYPE, "image/" + imgType); values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis()); values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis()); values.put(MediaStore.Images.Media.DATA, filepath.toString()); return cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); }