我已经看过几个例子,但仍然不明白为什么,当我编辑邮件时,我看到.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”,如何解决?
答案 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。