0

我看过几个例子,但仍然不明白为什么,当我编辑邮件时,我看到了 .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),但这是一个细节......

编辑:我刚刚调试了我的意图:它在流的值中显示“未缓存”,如何解决?

在此处输入图像描述

4

2 回答 2

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);
于 2013-08-31T13:29:18.593 回答
1

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

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

其次,这可能不是应用内部存储的正确途径。永远不要硬编码路径。例如,对于 Android 4.2 平板电脑上的辅助帐户和受限配置文件,您的应用程序将失败。始终使用诸如 之类的方法getFilesDir()来获取您的内部存储空间。

您将需要将文件复制到外部存储,或者更好的是用于FileProvider通过content:// Uri.

于 2013-08-31T12:47:32.170 回答