我将使用标准的android intent ACTION_SEND
发送电子邮件。问题是我试图附加存储在我的应用缓存中的文件(emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(..))
),而电子邮件应用没有权限读取它,因为它是另一个包名。我不想将文件保存在公共可用存储中,如外部存储(sd)。我如何授予意向接收者与发送者活动相同的权限?
答案 0 :(得分:2)
不要传递Uri.fromFile(...)
返回的简单文件:// url相反,您需要使用FileProvider
FileProvider是ContentProvider的一个特殊子类,它通过创建内容来促进与应用程序关联的文件的安全共享:// Uri用于文件而不是文件:/// Uri。
如果这对你来说还不够,还可以看看CommonsWare的CWAC-Provider
CWAC-Provider:帮助内容提供商失败。
该项目提供了一个基于Google的FileProvider的StreamProvider。与FileProvider一样,StreamProvider旨在通过ContentProvider接口(content:// Uri值)提供文件,进行读写。 StreamProvider提供:
- 从资产和原始资源中提供文件
- 从getExternalFilesDir()和getExternalCacheDir()
提供文件除了FileProvider支持从getFilesDir(),getCacheDir()和Environment.getExternalStoragePublicDirectory()提供文件外。