在Android上以编程方式发送带有附件的电子邮件
我希望实现一个按钮,按下它将打开一个附件文件默认的电子邮件客户端 我正在跟踪,但在startActivity上收到一条错误消息,说它正在等待一个活动参数,而我正在给它一个意图。 我使用的是API 21和Android Studio 1.1.0,所以可能与链接中提供的答案中的注释有关 这是我作为Android开发者的第四天,如果我错过了一些非常基本的东西,我很抱歉 这是我的密码:在Android上以编程方式发送带有附件的电子邮件,android,email,android-intent,email-attachments,Android,Email,Android Intent,Email Attachments,我希望实现一个按钮,按下它将打开一个附件文件默认的电子邮件客户端 我正在跟踪,但在startActivity上收到一条错误消息,说它正在等待一个活动参数,而我正在给它一个意图。 我使用的是API 21和Android Studio 1.1.0,所以可能与链接中提供的答案中的注释有关 这是我作为Android开发者的第四天,如果我错过了一些非常基本的东西,我很抱歉 这是我的密码: public void sendFileToEmail(File f){ String subjec
public void sendFileToEmail(File f){
String subject = "Lap times";
ArrayList<Uri> attachments = new ArrayList<Uri>();
attachments.add(Uri.fromFile(f));
Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachments);
intent.setClassName("com.android.email", "com.android.mail.compose.ComposeActivity");
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
public void sendFileToEmail(文件f){
字符串主题=“圈数”;
ArrayList attachments=新的ArrayList();
add(Uri.fromFile(f));
意向意向=新意向(意向.行动\发送\多次);
intent.putExtra(intent.EXTRA_SUBJECT,SUBJECT);
intent.putParcelableArrayListExtra(intent.EXTRA\u流,附件);
intent.setClassName(“com.android.email”、“com.android.mail.compose.ComposeActivity”);
试一试{
星触觉(意向);
}捕获(ActivityNotFounde异常){
e、 printStackTrace();
}
关于Kotlin代码片段的官方文档如下:
我认为您的问题在于您没有使用正确的文件路径
以下是我的作品:
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"email@example.com"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject here");
emailIntent.putExtra(Intent.EXTRA_TEXT, "body text");
File root = Environment.getExternalStorageDirectory();
String pathToMyAttachedFile = "temp/attachement.xml";
File file = new File(root, pathToMyAttachedFile);
if (!file.exists() || !file.canRead()) {
return;
}
Uri uri = Uri.fromFile(file);
emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(emailIntent, "Pick an Email provider"));
编辑:请求访问存储以共享应用程序专用的文件可能不是一个好主意。幸运的是,经过一点配置后,从应用程序专用存储共享文件非常容易。请参阅本指南:
如果共享外部存储上的文件,还需要通过清单文件授予用户权限,如下所示
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
尝试使用此功能。它正在工作
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("*/*");
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(listVideos.get(position).getVideoPath())));//path of video
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
感谢对于更新的设备,您将遇到FileUriExposedException。以下是如何在Kotlin中避免它
val file = File(Environment.getExternalStorageDirectory(), "this")
val authority = context.packageName + ".provider"
val uri = FileProvider.getUriForFile(context, authority, file)
val emailIntent = createEmailIntent(uri)
startActivity(Intent.createChooser(emailIntent, "Send email..."))
private fun createEmailIntent(attachmentUri: Uri): Intent {
val emailIntent = Intent(Intent.ACTION_SEND)
emailIntent.type = "vnd.android.cursor.dir/email"
val to = arrayOf("some@email.com")
emailIntent.putExtra(Intent.EXTRA_EMAIL, to)
emailIntent.putExtra(Intent.EXTRA_STREAM, attachmentUri)
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject")
return emailIntent
}
该文件是函数的一个参数,所以我不认为这是个问题。该文件只是一个参数,但您需要检查它是否可用。并且您需要授予读取外部存储权限才能读取文件。很高兴帮助@Jasmine!!享受编码工作,因为meI必须替换
getExternalStorageDirectory()
使用getExternalCacheDir()
如果我的答案对您有效,请接受我的答案。这样您就可以从SOF中未回答的问题列表中避免这个问题