【发布时间】:2014-12-17 10:14:06
【问题描述】:
首先,我实际上已经阅读了几个关于在 Android 上发送附件的主题。也就是说,我还没有找到解决问题的方法。
我的应用程序相对简单,用户输入数字,然后使用 openFileOutput(filename, Context.MODE_APPEND); 将它们保存到“values.csv”。
现在,这是我用来将文件附加到电子邮件并发送的代码(我是从其他文件线程之一获得的。)
private void sendEmail(String email) {
File file = getFileStreamPath(filename);
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, "Test");
String to[] = { email };
intent.putExtra(Intent.EXTRA_EMAIL, to);
intent.putExtra(Intent.EXTRA_TEXT, "Testing...");
intent.putExtra(Intent.EXTRA_STREAM, path);
startActivityForResult(Intent.createChooser(intent, "Send mail..."),
1222);
}
这会打开我的电子邮件客户端,除了附加文件外,它一切正常,向我显示“文件不存在”的 toast 通知。
我错过了什么吗?顺便说一句,我已经添加了读写外部存储的权限。
我们将不胜感激。
编辑:我可以使用 DDMS 中的文件资源管理器模块并导航到我的 values.csv 所在的 /data/data/com.example.myapp/files/,然后将其复制到我的计算机,这样文件就可以了存在。一定是我的代码有问题。
【问题讨论】:
-
我担心邮件应用程序无法读取您的文件,您是否尝试将 openFileOutput 中的模式更改为 MODE_WORLD_READABLE?
-
它说它在 API 17 中已被弃用,但它似乎可以工作,现在 Mail 可以读取并发送它。但是,通过将其更改为 MODE_WORLD_READABLE,它就失去了 APPEND 质量,这很重要……有什么办法可以同时保持两者?
-
是的,实际上这不是一个好的举措,因为存在安全漏洞,但它引导我找到答案,请稍候,我会为你写答案:)
-
Append 和 world readable 不应该是独占的,但是一些邮件客户端不会从另一个应用程序的内部存储中获取附件,即使它们是可读的(除非你欺骗他们)。所以最好要么使用外部存储,要么使用带有内容提供者的现代“android方式”。