Send image from url as attachment to android

I have a problem that I want to send an email with the image attached, and the image to the address. I can not send this. Please offer me the correct result.

Thanks in advance.

Here is the code:

btn_mail.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { setImage(item.getImageUrl()); if(item instanceof Product) { body = "<html><body>Found this a great deal on <a href=http://www.bizrate.com>@Bizrate</a><a href="+item.getUrl()+"> "+item.getTitle()+"</a><br><br><img src="+item.getImageUrl(100)+"></body></html>"; }else { Offer offer = (Offer)item; body = "<html><body>Found this a great deal on <a href=http://www.bizrate.com>@Bizrate</a><a href="+item.getUrl()+"> "+item.getTitle()+"</a><br><br><img src="+item.getImageUrl(100)+"></body></html>"; } Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, item.getTitle()); /*emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Title: " + item.getTitle() + "\n" + "Description: " + item.getDescription() + "\n" + "\n" + "Max Price: " + max_price + "\n" + "Min Price: " + min_price);*/ emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,Html.fromHtml(body)); //emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://com.shopzilla.android.common/" + R.drawable.barcode)); //emailIntent.putExtra(Intent.EXTRA_STREAM, imageBitmap); emailIntent.setType("message/rfc822"); context.startActivity(Intent.createChooser(emailIntent, "Send mail...")); } }); private void setImage(String string) { try { URL url = new URL(string); imageBitmap = BitmapFactory.decodeStream(url.openConnection().getInputStream()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 
+4
source share
2 answers

The <img> tag will not work. To send an image as an attachment, you must save it to the SD card.

You need to add

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

to your AndroidManifest.xml.

To save the image, do this (in the background thread!):

 try { File rootSdDirectory = Environment.getExternalStorageDirectory(); File pictureFile = new File(rootSdDirectory, "attachment.jpg"); if (pictureFile.exists()) { pictureFile.delete(); } pictureFile.createNewFile(); FileOutputStream fos = new FileOutputStream(pictureFile); URL url = new URL("http://your_image_server/dummy.jpg"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setDoOutput(true); connection.connect(); InputStream in = connection.getInputStream(); byte[] buffer = new byte[1024]; int size = 0; while ((size = in.read(buffer)) > 0) { fos.write(buffer, 0, size); } fos.close(); } catch (Exception e) { e.printStackTrace(); return null; } 

After the image has been saved, get its Uri and send it to the intent (in the main stream):

 Uri pictureUri = Uri.fromFile(pictureFile); emailIntent.putExtra(Intent.EXTRA_STREAM, pictureUri); 

Hope this helps :)

+6
source

You can do it very fast with this code

 protected Uri getImageUri(String imgTitle,Bitmap inImage) { if(inImage == null) { return null; } ByteArrayOutputStream bytes = new ByteArrayOutputStream(); inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes); String path = Images.Media.insertImage(getContentResolver(), inImage, imgTitle, null); return Uri.parse(path); } 

A bitmap comes from an image, and you can easily use it from

 ((BitmapDrawable)img.getDrawable()).getBitmap() 

getImageUri must be executed in a thread (or handler) so as not to block the behavior of the main application

0
source

Source: https://habr.com/ru/post/1369623/


All Articles