I am making an app that allows the user to share an image using android intent but how to get that URI of
a bitmap without need to saving it to sd card
I have used this code that works fine, but I don't need to save this bitmap to sd card
private Uri getImageUri(Context inContext, Bitmap inImage) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "title", null); return Uri.parse(path); }
I need to get that URI without saving that bitmap to sd card
Ideally, your "upload to a server" logic can work with an InputStream . In that case, call openInputStream() on a ContentResolver to get an InputStream on the content identified by the Uri .
In fact sharing an image without saving it is by using cache memory. Consequently we can share it like an uri. On the other hand we can simply store the image in cache and use the uri for sharing. Furthermore we are saving bitmap to cache and use it for sharing.
Try this:
protected void ShareImage(Intent intent) { try { URL url = new URL(mImageUrl); Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream()); intent.putExtra(Intent.EXTRA_STREAM, getImageUri(mActivity, image)); } catch (Exception e) { e.printStackTrace(); } startActivityForResult(Intent.createChooser(intent, 1001)); } public Uri getImageUri(Context inContext, Bitmap inImage) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); return Uri.parse(path); } public void onActivityResult(int requestCode, int resultCode, Intent data){ //check for result is OK and then check for your requestCode(1001) and then delete the file }
Try this way
protected void tryToShareImage(Intent intent) { try { URL url = new URL(mImageUrl); Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream()); intent.putExtra(Intent.EXTRA_STREAM, getImageUri(mActivity, image)); } catch (Exception e) { e.printStackTrace(); } startActivity(Intent.createChooser(intent, "Share using...")); } public Uri getImageUri(Context inContext, Bitmap inImage) { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); return Uri.parse(path); }
after that You can delete files using File.delete()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With