java - Android - 将图像附加到电子邮件

标签 java android email android-intent email-attachments

我正在我的应用程序中开发反馈功能,用户应该从图库中选择一张图像并输入他的消息并按发送,在发送按钮上单击代码应该从框中获取文本(下图)并将其附加到电子邮件 Intent 并发送整个内容,一切似乎都工作正常,直到我收到“无法附加空文件”消息,这就是我在代码中的进展

 String rating = String.valueOf(RateBar.getRating());
            String subject = Feedback.getText().toString();
            String FileLocation = FilePathPreview.getText().toString();
            String to ="EngNor.supp@gmail.com";
            String message = UserInput.getText().toString();
            String body = "Rating : "+rating+" out of 5"+
                    "\n "+message;
            Intent email = new Intent(Intent.ACTION_SEND);
            email.putExtra(Intent.EXTRA_EMAIL, new String[]{to});
            email.putExtra(Intent.EXTRA_SUBJECT, subject);
            email.putExtra(Intent.EXTRA_TEXT, body);
            email.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:/"+FileLocation));

            //need this to prompts email client only
            email.setType("message/rfc822");

            startActivity(Intent.createChooser(email, "Choose an Email client :"));
<小时/>
public void grabImg(){
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent,
            "Select Picture"), SELECT_PICTURE);
}
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
        if(resultCode == RESULT_OK){
            Uri selectedImage = imageReturnedIntent.getData();
            String PathP = selectedImage.getPath().toString();
            FilePathPreview.setText(PathP);
        }
}

Feedback activity

最佳答案

创建一个全局 Uri 变量,然后将 uri 保存在 onActivityResult()

Uri uri = null;

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
        if(resultCode == RESULT_OK){
            Uri selectedImage = imageReturnedIntent.getData();
            uri  = selectedImage; // here set the uri 
            String PathP = selectedImage.getPath().toString();
            FilePathPreview.setText(PathP);
        }
}

然后将相同的 uri 变量传递给

        //....
        email.putExtra(Intent.EXTRA_STREAM, uri);
        //....
        //need this to prompts email client only
        email.setType("message/rfc822");

        startActivity(Intent.createChooser(email, "Choose an Email client :"));

更新:如果您仍然无法分享,请添加此标志

email.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

关于java - Android - 将图像附加到电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39079554/

相关文章:

android - 注销时,清除 Activity 历史堆栈,防止 "back"按钮打开仅登录的 Activity

email - 从tradingview调用rest apis

php - 群发邮件ID重复检查

java - 类必须在内部创建新对象,无法从单元测试中访问该对象

java - 性能上的同步 vs ReentrantLock

java - 如何根据android中显示的字母更改字母的样式

java - Hibernate:Criteria Query child objects (associations) by Entity (not Id)

java - 如何从另一个 Activity 的不同回收 View 开始创建新的回收 View

java - CipherOutputStream 和 FileOutputStream(someFile, true) 在追加数据时产生垃圾

html - 我们如何使用 html 或 uni 代码在 gmail 中创建印度卢比 (INR) 符号?