我想在电子邮件信件中发送文本文件。 但问题是我希望这个文件对我的应用程序是私有的,我想只为电子邮件应用程序提供读取权限。
所以,我使用代码:
获取文件路径:
logFilePath = activity.getDir(“my_logs”,Context.MODE_PRIVATE)+“/ log.txt”;
将文件添加到电子邮件中:
Uri logUri = Uri.fromFile(new File(logFilePath));
mail.putExtra(android.content.Intent.EXTRA_STREAM, logUri);
mail.setType("text/plain");
该文件已创建,我可以看到它附在信件上,当我发送时,但是当我收到信件时没有附件。
我尝试了这个选项:
mail.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
activity.grantUriPermission("com.google.android.gm", logUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
但结果是一样的。我试着
mail.setData(logUri);
因为我认为可能是意图世界读取标志仅影响数据字段,但结果是相同的。
然后我尝试更改目录权限:
activity.getDir("my_logs", Context.MODE_WORLD_READABLE) + "/log.txt";
但它没有效果。
在
activity.getCacheDir() + "/log.txt";
也不行。
唯一有效的选择是
activity.getExternalCacheDir() + "/log.txt";
因此,正如我所看到的,无论我如何尝试,内部存储器中的文件都无法读取电子邮件应用程序。
有没有办法让它可读?
或者可能有办法在外部存储器中创建私人目录/文件?
答案 0 :(得分:0)
在这种情况下,我们应该使用内容提供商。有一个预定义的内容提供程序,用于共享文件,非常容易实现:http://developer.android.com/reference/android/support/v4/content/FileProvider.html