Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上以编程方式发送带有附件的电子邮件_Android_Email_Android Intent_Email Attachments - Fatal编程技术网

在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

我希望实现一个按钮,按下它将打开一个附件文件默认的电子邮件客户端

我正在跟踪,但在startActivity上收到一条错误消息,说它正在等待一个活动参数,而我正在给它一个意图。 我使用的是API 21和Android Studio 1.1.0,所以可能与链接中提供的答案中的注释有关

这是我作为Android开发者的第四天,如果我错过了一些非常基本的东西,我很抱歉

这是我的密码:

    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中未回答的问题列表中避免这个问题