Android发送xml文件不发送附件

时间:2013-08-31 12:42:47

标签: android email android-intent

我已经看过几个例子,但仍然不明白为什么,当我编辑邮件时,我看到.xml附加但是当我收到的时候没有附件!

这是我的代码

File f = new File("data/data/xxx/files/xxx.xml");
                    Boolean b1 = f.exists();
                    Boolean b2 = f.canRead();
                       if (b1 && b2) {
                          Intent sendIntent = new Intent(Intent.ACTION_SEND);
                          sendIntent.setType("text/plain");
                          sendIntent.putExtra(Intent.EXTRA_EMAIL, "");
                          sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" +
                             f.getAbsolutePath()));
                          sendIntent.putExtra(Intent.EXTRA_SUBJECT, "XXX");
                          sendIntent.putExtra(Intent.EXTRA_TEXT, R.string.mail_body);
                          startActivity(Intent.createChooser(sendIntent, "Email:"));
                       } else {
...

啊,只有一个细节...当我选择要发送的应用程序时,即使我写了putExtra(Intent.EXTRA_SUBJECT)和putExtra(Intent.EXTRA_TEXT),也没有主题或正文,但这是一个细节......

编辑:我刚刚调整了我的意图:它在流的价值中说“Not CACHED”,如何解决?

enter image description here

2 个答案:

答案 0 :(得分:4)

出于某些安全目的,您无法直接从内部存储附加文件,因此首先必须将该文件从内部目录复制到外部目录,然后在此之后发送邮件,如果您希望可以从onActivityResult中的外部存储中删除该文件()方法。

这是一段代码:

private  File copyFileToExternal(String fileName) {
        File file = null;
        String newPath = Environment.getExternalStorageState()+"/folderName/";
        try {
            File f = new File(newPath);
            f.mkdirs();
            FileInputStream fin = openFileInput(fileName);
            FileOutputStream fos = new FileOutputStream(newPath + fileName);
            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ((len1 = fin.read(buffer)) != -1) {
                fos.write(buffer, 0, len1);
            }
            fin.close();
            fos.close();
            file = new File(newPath + fileName);
            if (file.exists())
                return file;
        } catch (Exception e) {

        }
        return null;
    }

电子邮件发送方式:

private void sendEmail(String email) {

        File file = new File(Environment.getExternalStorageState()+"/folderName/" + fileName+ ".xml");
        Uri path = Uri.fromFile(file);
        Intent intent = new Intent(android.content.Intent.ACTION_SEND);
        intent.setType("application/octet-stream");
        intent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
        String to[] = { email };
        intent.putExtra(Intent.EXTRA_EMAIL, to);
        intent.putExtra(Intent.EXTRA_TEXT, message);
        intent.putExtra(Intent.EXTRA_STREAM, path);
        startActivityForResult(Intent.createChooser(intent, "Send mail..."),
                1222);
    }

然后

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1222) {
            File file = new File(Environment.getExternalStorageState()+"/folderName/" + fileName+ ".xml");
            file.delete();
}
}

像这样调用这个方法:

 copyFileToExternal(filename + ".xml");
 sendEmail(EmailId);

答案 1 :(得分:1)

  

我已经看过几个例子,但仍然不明白为什么,当我编辑邮件时,我看到.xml附加但是当我收到的时候没有附件!

首先,第三方应用无法读取您应用的内部存储空间。

其次,这可能不是您应用内部存储的正确途径。 永远不要硬编码路径。例如,对于Android 4.2平板电脑上的辅助帐户和受限制的个人资料,您的应用会失败。始终使用getFilesDir()等方法来获取内部存储空间。

您需要通过content:// Uri将文件复制到外部存储,或者更好,use FileProvider to serve up your file from internal storage