当前标签 / 权限 / 总共2篇

FileProvider

前言

在Android中经常会遇到存储和访问文件,一般情况下我们会使用Context#openFileOutput()或者Context#getCacheDir()来获得文件存储路径,但是这两种方式存储的文件只能在APP内部访问,不能共享给其他APP访问。这个时候我们就需要将文件存储在外部存储卡上面,使用Environment#getExternalStorageDirectory()或者Environment#getDownloadCacheDirectory(),但是这样带来了两个潜在的问题。

  1. 所有应用都可以访问该数据,造成安全问题,我们只希望部分应用可访问。
  2. 为了读写该文件APP需要有READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE权限,需要访问的其他APP也需要READ_EXTERNAL_STORAGE权限才能读取。对于内容的提供者我们不能确保访问的应用程序就一定有READ_EXTERNAL_STORAGE权限 。

因此使用file://... URI来共享文件并不好,替代方案就是定义一个ContentProvider,使用content://... URI来共享文,而FileProvider是对ContentProvider的进一步封装,专门用于文件共享。

FileProvider是什么

FileProvider是ContentProvider的一个特殊子类,它通过创建一个 content:// Uri 来使应用程序相关的文件实现安全共享:file:/// Uri.

之前我们在使用URL来访问内容的时候可以使用 Intent.setFlags() 来设置一些临时访问权限,这些Google认为是不安全的,所以从Android7.0开始执行了“StrictMode API 政策禁”,来使用FileProvider来解决这个访问权限问题。

阅读更多

Android 6.0/7.0权限问题

Android6.0动态权限控制

Android6.0系统

在Android6.0(M)之前,在用户安装应用的时候会产生一个权限列表,只有用户允许这些权限后,应用才可以正常的安装,这就会产生一个问题,这些权限对用户是不具有感知性的,也就是说用户都不知道你要这些权限干什么,我明明装的是一个阅读类型的应用,你却要我拨打电话的权限,你想干嘛呢?当然绝大部分的开发者是善意的,但也避免不了一些特殊人群利用这些“漏洞”做一些不好的事情。

而在Android6.0(M)之后,用户是可以不管权限直接安装应用的,当应用需要调用某些权限的时候,会给予用户一个通知与说明,我要这些权限干什么,这样下来可以让用户有更加清醒的权限分配意识,也在一定程度上更加人性化的保护了用户的隐私,避免了“权限一刀切”。

阅读更多