【问题标题】:Android email app with attachment doesn't carry attachment with itself带有附件的 Android 电子邮件应用程序本身不带有附件
【发布时间】:2017-04-11 12:28:33
【问题描述】:

尝试测试一个简单的应用程序,该应用程序将从图库中获取图像并将其作为电子邮件附件传递,我做了以下操作:

使用 Intent 通过 ImageButton 访问图库的代码

ivGalerija.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Select content image"), 1);

            }
        });

OnActivityResult 方法被重写

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if(resultCode == RESULT_OK){

            if(requestCode == 1){
            imageUri = data.getData();
            File root = Environment.getExternalStorageDirectory();
            String pathToMyAttachedFile = imageUri.getPath().toString();
            File file = new File(root, pathToMyAttachedFile);
            if (!file.exists() || !file.canRead()) {
                return;
            }
            uri = Uri.fromFile(file);
        }
    }
}

提交按钮上的onClick方法打开电子邮件应用程序

bSubmit = (Button) findViewById(R.id.bSubmit);
        bSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                etMesto = (EditText) findViewById(R.id.etMesto);
                etUlica = (EditText) findViewById(R.id.etUlica);
                etOpis = (EditText) findViewById(R.id.etOpis);

                Intent intent = null, chooser = null;

                es = (TextView) findViewById(R.id.tvMesto);

                intent = new Intent(Intent.ACTION_SEND);

                intent.setData(Uri.parse("mailto:"));
                String[] to = {"aco1992@gmail.com"};
                intent.putExtra(Intent.EXTRA_EMAIL, to);
                intent.putExtra(Intent.EXTRA_SUBJECT, "Prijava kvara");
                intent.putExtra(Intent.EXTRA_TEXT, "Elektrodistribucija: " + spElektrodistribucija + "\nMesto neovlascene potrosnje: " +
                        etMesto.getText().toString() + "\nUlica i broj: " + etUlica.getText().toString() + "\nOpis: " + etOpis.getText().toString());
                intent.setType("message/rfc822");

                intent.putExtra(Intent.EXTRA_STREAM, uri);
                chooser = Intent.createChooser(intent, "Send email");
                startActivity(chooser);
            }
        });
    }

没有附件,整个事情都可以正常工作,文本以正确格式传递到邮件正文,但没有附件。我已将 Uri 字段设为静态以使其随处可访问,但不确定这是否是问题所在。无论如何,事不宜迟...此代码不会将图像作为意图携带到电子邮件应用程序中并发送它,而是整个事情就像没有选择任何内容一样发生。我错过了什么?

【问题讨论】:

    标签: android forms email email-attachments


    【解决方案1】:

    不要从 uri 构造 uri。

    intent.putExtra(Intent.EXTRA_STREAM, uri);
    

    但请改用原始 uri:

    intent.putExtra(Intent.EXTRA_STREAM, data.getData());
    

    【讨论】:

    • 但数据字段在 OnActivityResult 中,无法在上面访问。我应该如何访问它?感谢您的回复顺便说一句
    • uri = data.getData();这样您就可以使用原始 uri 而不是构建新的 uri。
    • 我已经从我的 OnResultActivity 方法中删除了除 imageUri = data.getData() 之外的所有内容,将字段设为静态并在我的提交方法中访问它,我将它放在 putExtra 方法中,它的工作方式类似于一种魅力。我不能感谢你,我已经绝望了好几天
    猜你喜欢
    • 2016-10-08
    • 2011-04-14
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    相关资源
    最近更新 更多