我一直在研究Android程序,使用Intent发送包含附件(图像文件,音频文件等)的电子邮件ACTION_SEND.电子邮件只有一个附件时,该程序正在运行.我曾经Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri)将指定的图像文件附加到邮件中,并且工作正常,邮件可以通过Gmail传送.但是,当我尝试通过Intent.putExtra(android.content.Intent.EXTRA_STREAM, uri)多次调用将多个图像附加到同一邮件时,它无法正常工作.电子邮件中没有显示任何附件.
我搜索了SDK文档和Android编程用户组关于电子邮件附件但找不到任何相关信息.但是,我发现有另一个意图常量ACTION_SEND_MULTIPLE(自API级别4起可用)可能符合我的要求.基于SDK文档,它只是声明它向其他人提供多个数据,它的工作方式类似ACTION_SEND,除了数据是多个.但我还是无法弄清楚这个命令的正确用法.我试图声明意图ACTION_SEND_MULTIPLE,然后putExtra(EXTRA_STREAM, uri)多次调用以附加多个图像,但我得到了与之前相同的错误结果,没有任何附件显示在电子邮件中.
有没有人试过ACTION_SEND_MULTIPLE并使用多个电子邮件附件?
我在我的应用程序中添加了几个示例项,因此当用户第一次看到它时它看起来不那么空.带有示例项的列表应该有一个图像,我要使用的图像已经存储在应用程序的/ res/drawable-folder中.
因为我已经有一个方法从URI加载项目图像我想获取到/res/drawable/myImage.jpg的URI,但我似乎无法正确.
流程如下:使用表示图像URI的字符串创建项目.将项列表发送到列表列表通过将字符串转换为URL然后运行url.openStream()来将图像加载到后台任务中;
我已经为URI尝试了一些选项而没有任何成功."android.resource:// ....."说未找到unknow protocoll"file://"文件
所以现在我有点失去了如何解决这个问题..
我正在使用以下方法从url下载单个图像
public static Bitmap getBitmap(String url) {
try {
InputStream is = (InputStream) new URL(url).getContent();
Bitmap d = BitmapFactory.decodeStream(is);
is.close();
return d;
} catch (Exception e) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
有时我会得到一个outofmemory异常.
我无法捕捉到内存异常.该应用程序将关闭.怎么预防这个?
是否有更好的下载图像的方法也更快?
我试图在缓存目录中共享图像文件,我有完整的路径,但无法在附件中发送文件,代码是
File shareImage=Utils.getBitmapFile();
Log.d("Activity", "get final path in result"+shareImage.getAbsolutePath());
/*MimeTypeMap mime = MimeTypeMap.getSingleton();
String ext=shareImage.getName().substring(shareImage.getName().lastIndexOf(".")+1);
String type = mime.getMimeTypeFromExtension(ext);
shareIntent.setType(type);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
Uri shareImageUri = Uri.fromFile(shareImage);
Uri shareImageUri = Uri.fromParts("content", shareImage.getAbsolutePath(), null);//("content://"+shareImage.getAbsolutePath());
*/
Uri shareImageUri = Uri.fromFile(shareImage);
Log.d("Result ","uri is "+shareImageUri.toString());
shareIntent.putExtra(Intent.EXTRA_STREAM, shareImageUri);
startActivity(Intent.createChooser(shareIntent, "Share Results"));
Run Code Online (Sandbox Code Playgroud)
上面注释的代码不起作用
发送邮件显示附件,但没有收到结束没有附件,Facebook共享也显示邮件中没有图像
这是什么原因?
我已经看到以下SO链接如何使用共享图像使用共享意图共享图像在Android和许多其他人,他们都没有能够解决这个问题
PS;
1.目的是将屏幕截图保存在缓存目录中并从那里在线共享
2.我确实有文件,我可以通过DDMS从设备中取出它并在系统上查看.
我的应用程序拍照,我想在Instagram上分享.
我的应用将图像保存在此目录中
File storagePath = new File(Environment.getExternalStorageDirectory() + "/DCIM/Camera/tubagram");
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试使用此代码获取我在Instagram上分享的最后一张照片
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("image/*");
final ContentResolver cr = getContentResolver();
final String[] p1 = new String[] {MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATE_TAKEN};
Cursor c1 = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, null, p1[1] + " DESC");
if (c1.moveToFirst() ) {
Log.i("Teste", "last picture (" + c1.getString(0) + ") taken on: " + new Date(c1.getLong(1)));
}
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+Environment.getExternalStorageDirectory() + "/DCIM/Camera/tubagram/" + c1.getString(0)));
shareIntent.setPackage("com.instagram.android");
c1.close();
startActivity(shareIntent);
Run Code Online (Sandbox Code Playgroud)
我收到一个Toast,显示此错误消息"无法下载文件".这个Toast由Instagram发送.
我尝试使用此链接示例 - 在instagram中共享照片 - 但无法正常工作.
请帮帮我!!!
我正在尝试为用户创建一个选项,使其仅通过电子邮件从我的应用程序发送文件。该文件位于应用程序内部,可通过 FileProvider 访问。
这是 contentURI 的样子content://packagename.files/files/somefile.ext
在这里,您可以看到,我让用户将文件共享到 PicsArt、Google Drive、OneDrive 和电子邮件。
我能够成功地将内容分享给前三个客户,因为他们的应用程序非常具体。但是当涉及到电子邮件时,我需要用户从他安装在手机中的应用程序中选择客户端。
这是我创建的两组代码:
代码选项 1:
Intent EMail = ShareCompat.IntentBuilder.from(this)
.setType("message/rfc822")
.setSubject("Emailing: File Attached")
.setText("Hello")
.setStream(contentUri)
.setChooserTitle("Send via EMail").getIntent();
startActivity(Intent.createChooser(EMail, "Send via EMail"));
Run Code Online (Sandbox Code Playgroud)
上面的代码向我展示了一个选择器,其中有许多应用程序可以处理文件,如下图所示。
如果我选择任何电子邮件客户端应用程序或任何其他应用程序,这个程序就可以正常工作。
但这样做的问题是,用户可以选择任何应用程序,这不是应用程序期望的行为。所以,我将代码修改如下:
final Intent _Intent = new Intent(Intent.ACTION_SENDTO);
_Intent.setType("text/html");
_Intent.setData(Uri.parse("mailto:"));
_Intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
_Intent.putExtra(Intent.EXTRA_STREAM, contentUri);
_Intent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Emailing: File Attached");
_Intent.putExtra(android.content.Intent.EXTRA_TEXT,
"Hello");
startActivity(Intent.createChooser(_Intent, "Send via EMail"));
Run Code Online (Sandbox Code Playgroud)
这是代码的结果:
但是,现在的问题是我无法从内容提供程序(FileProvider)发送文件。选择后邮件客户端显示如下消息:
它只是没有将文件附加到上面列表中任何客户端的电子邮件中。
如果有人能在这里帮助我,我将不胜感激。我认为,我在这里尝试了所有可能的场景,通过更改 mime 类型、以不同方式设置内容、设置数据设置流等,但无法获得所需的结果。
如果您需要任何其他详细信息,请告诉我。
再次提前致谢。
我用了
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
Uri screenshotUri = Uri.parse("file//res/drawable/u.png");
sharingIntent.setType("image/png");
sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
startActivity(Intent.createChooser(sharingIntent, "Share image using"));
Run Code Online (Sandbox Code Playgroud)
//我使用sumsung real为device.and我选择在facebook上分享.//但是内容是空的而不是我的共享图像我无法共享图像.
这是意图动作发送不使用facebook sdk.你能帮我吗?
我试图通过这样的分享意图分享图像:
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("image/png");
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, application.getString(R.string.app_name));
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT,application.getString(R.string.app_share_message));
File image = new File(Uri.parse("android.resource://" + C.PROJECT_PATH + "/drawable/" + R.drawable.icon_to_share).toString());
sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(image));
shareMe(sharingIntent);
Run Code Online (Sandbox Code Playgroud)
共享意图正确触发,我选择Gmail,一切都按预期运行,直到我按下发送.我收到通知"无法显示附件",并且没有它发送电子邮件...为什么?
谢谢你的时间.
所以我想用来Intent.ACTION_SEND从我的应用程序共享图像。
这是我正在使用的代码
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, shareImgURI);
shareIntent.setType("image/*");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share images..."));
Run Code Online (Sandbox Code Playgroud)
并且shareImgURI是content://com.android.providers.media.documents/document/image%3A298
它会打开选择器,但是当我选择一个选项时没有任何反应。我错过了什么吗?