android N FileProvider使用方法

时间:2024-04-08 22:35:13

自从小米平板3发布之后,很多客户反应我们的APP升级时,下载进度到了97%左右就停止了,无任何响应。经过排查,其实下载下来的安装包是完整的,在静默安装时失败了,UI没来得及更新。安装失败的原因是: Android7.0新增了应用间共享文件FileProvider,我们的安装包保存在SD卡目录上,安装时读取文件失败;需要通过FileProvider读取文件才能正常安装。

FileProvider继承于ContentProvider,可以使文件共享时更安全。以前使用 file:///Uri,那么现在可以用content://Uri来替换。

定义FileProvider
在mainifest中注册,新增<provider>标签元素。

  • 设置name属性和指定的值,android.support.v4.content.FileProvider。
  • 设置authorities,一般由你的包名+fileprovider构成,保证唯一性。
  • 设置exported为false。禁止跟其他应用交互。
  • 设置grantUriPermission为true,授予文件访问权限。

android N FileProvider使用方法

指定可使用文件
一个FilerProvider只能为你预先指定的文件目录产生一个content URI。如何指定文件域和文件路径呢?
创建资源文件,res/xml/provider_path.xml。

android N FileProvider使用方法
注意,<path>必须包含一个或者多个子元素。

  • files-path:代表APP的内部存储,类似Context.getFileDirs()目录中的文件
  • cache-path:代表APP内部存储中缓存目录下的文件。类似,getCacheDir()
  • external-files:代表外部存储的根目录。类似,Enviroment.getExternalStorageDirectory()
  • external-files-path:代表APP的外部存储根目录。类似,Context#getExternalFileDir(String).  Context.getExternalFileDir(null).
  • external-cache-path:代表APP外部缓存根目录。类似,Context.getExternalCacheDir()

android N FileProvider使用方法

将指定的文件目录引用到注册文件中。

android N FileProvider使用方法
配置成功,如何调用
根据系统版本判别,低于Android N的版本,仍然采用Uri.formUri(file)。而N版本或是以上版本是这样调用的,FileProvider.getUriForFile(mContext,getPackageName()+".fileprovider",file)
最后以APP安装示例结束FileProvider的基本使用方法。

android N FileProvider使用方法