我有一个问题,我想发送一封带有图片附件的电子邮件,图片在网址上。我无法发送。请建议我正确的结果。
提前致谢。
以下是代码:
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();
}
}
答案 0 :(得分:6)
&lt; img&gt; 标记不起作用。要将图像作为附件发送,必须将其保存到SD卡。
您需要添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
到你的AndroidManifest.xml。
要保存图像,请执行此操作(在后台线程中!):
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;
}
保存图像后,获取其Uri并发送到intent(在主线程中):
Uri pictureUri = Uri.fromFile(pictureFile);
emailIntent.putExtra(Intent.EXTRA_STREAM, pictureUri);
希望有所帮助:)
答案 1 :(得分:0)
您可以使用此代码快速完成此操作
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);
}
位图来自imageview,您可以轻松地从
获取((BitmapDrawable)img.getDrawable()).getBitmap()
getImageUri必须在Thread(或Handler)中执行,以免阻止主应用程序行为