通过Cache目录中的电子邮件发送文件

时间:2012-05-20 06:02:13

标签: android

我正在尝试从我的应用程序发送附加文件的电子邮件。

保存到外部存储(SDCard)的文件可以成功附加,但是无法附加保存到我可以获得getCacheDir()方法的临时目录中的同一文件。

唯一的区别是我要保存的文件保存位置, 这是因为Android规范或限制,还是我错过了什么?

我正在使用ACTION_SEND意图通过电子邮件发送附件文件

//// getting file path to save
//[fail] -- no attatchment in email
//path = new StorageUtil().getCacheFilePath(this, "attatchment.html");
//[success] -- attatchment.html is on email
path = new StorageUtil().getExternalAppStoragePath(this, "attatchment.html");
/// start intent if file saving is successful
if (this.export(path)==true) {
    Intent i = new Intent();
    i.setAction(Intent.ACTION_SEND);
    i.setType("text/html"); 
    i.putExtra(Intent.EXTRA_SUBJECT, "a subject");
    i.putExtra(Intent.EXTRA_TEXT, "");
    File f = new File(path);
    i.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));
    startActivity(Intent.createChooser(i, "Send Email"));
}

getCacheFilePath()从以下代码创建路径,其中fileName是方法的第二个参数:

File cacheDir = ctx.getCacheDir();
File cacheFile = new File(cacheDir, fileName);
return cacheFile.getPath(); //path

每条路径如下

//cache dir (attachcment failed): 
/data/data/{PACKAGE_NAME}/cache/attachment.html

//external dir (attachment successed): 
/mnt/sdcard/Android/data/{PACKAGE_NAME}/files/attachment.html

来自缓存目录canRead()的文件对象,可以获取文件长度。 谢谢!

==已解决==

我发现发送Gmail时 Logcat 上出现以下错误:

file:// attachment paths must point to file:///mnt/sdcard. Ignoring attachment file:///data/data/{PACKAGE_NAME}/cache/attachment.html"

所以这应该是Android限制。添加Intent.FLAG_GRANT_READ_URI_PERMISSION无效,而其他活动(如Dropbox)也无效。

1 个答案:

答案 0 :(得分:0)

我建议您使用getExternalCacheDir()代替getCacheDir(),后者指向“ / storage / emulated / 0 / Android / data /”。该文件夹下的文件似乎可以附加到gmail。