android N FileProvider使用方法

自从小米平板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,授予文件访问权限。


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


注意,<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的版本,仍然采用Uri.formUri(file)。而N版本或是以上版本是这样调用的,FileProvider.getUriForFile(mContext,getPackageName()+".fileprovider",file)
最后以APP安装示例结束FileProvider的基本使用方法。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值