Android 7.0之访问文件的权限控制

时间:2022-01-14 09:58:18


转载请标明出处:
http://blog.csdn.net/djy1992/article/details/72533310
本文出自:【奥特曼超人的博客】

权限更改

Android 7.0 做了一些权限更改,这些更改可能会影响您的应用。


系统权限更改

目录权限

为了提高私有文件的安全性,面向 Android 7.0 或更高版本的应用私有目录被限制访问 (0700)。此设置可防止私有文件的元数据泄漏,如它们的大小或存在性。此权限更改有多重副作用:

私有文件的文件权限不应再由所有者放宽,为使用 MODE_WORLD_READABLE 和或 MODE_WORLD_WRITEABLE 而进行的此类尝试将触发 SecurityException

  • 注:迄今为止,这种限制尚不能完全执行。应用仍可能使用原生 API 或 File API 来修改它们的私有目录权限。但是,我们强烈反对放宽私有目录的权限。

文件权限更改

FileUriExposedException 异常

传递软件包网域外的 file:// URI 可能给接收器留下无法访问的路径。

因此,尝试传递 file:// URI 会触发 FileUriExposedException。分享私有文件内容的推荐方法是使用 FileProvider。

DownloadManager 不再按文件名分享私人存储的文件。旧版应用在访问 COLUMN_LOCAL_FILENAME 时可能出现无法访问的路径。

面向 Android 7.0 或更高版本的应用在尝试访问 COLUMN_LOCAL_FILENAME 时会触发 SecurityException。

通过使用
DownloadManager.Request.setDestinationInExternalFilesDir()
或者
DownloadManager.Request.setDestinationInExternalPublicDir()

将下载位置设置为公共位置的旧版应用仍可以访问 COLUMN_LOCAL_FILENAME 中的路径,但是我们强烈反对使用这种方法。

对于由 DownloadManager 公开的文件,首选的访问方式是使用ContentResolver.openFileDescriptor()

在应用间共享文件 StrictMode API

对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。

如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExposedException 异常。

要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。

进行此授权的最简单方式是使用 FileProvider 类。如需了解有关权限和共享文件的详细信息,请谷歌开发中的《共享文件权限操作方法》

  • 设置文件共享
      了解如何设置您的应用程序共享文件。

  • 共享文件
      了解如何通过生成文件的内容URI,向URI授予访问权限,并向应用程序发送URI,从而向另一个应用程序提供文件。

  • 请求共享文件
      了解如何请求另一个应用程序共享的文件,接收该文件的内容URI,并使用内容URI打开文件。

  • 获取文件信息
      学习如何应用程序可以使用由fileprovider检索包括MIME类型和文件大小,文件信息生成的内容URI。




|| 版权声明:本文为博主杜锦阳原创文章,转载请注明出处。