如何授予意向接收者与意图发送者相同的权限?

时间:2014-03-13 18:03:02

标签: android android-intent permissions

我将使用标准的android intent ACTION_SEND发送电子邮件。问题是我试图附加存储在我的应用缓存中的文件(emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(..))),而电子邮件应用没有权限读取它,因为它是另一个包名。我不想将文件保存在公共可用存储中,如外部存储(sd)。我如何授予意向接收者与发送者活动相同的权限?

1 个答案:

答案 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()提供文件外。