android7.0上传文件后台,Android 7.0 FileProvider使用

1). FileProvider

Android 7.0的新特性规定,对于android 7.0应用(仅仅对于android 7.0版本的sdk而言,若是编译版本低于25仍然不会受到影响),android框架使用StrictMode Api禁止我们的应用对外部(跨越应用分享)公开file://,若使用file://格式共享文件则会报FileUriExposedException异常,android 7.0应用间的文件共享需要使用content://类型的URI分享,并且需要为其提供临时的文件访问权限

(Intent.FLAG_GRANT_READ_URI_PERMISSION和Intent.FLAG_GRANT_WRITE_URI_PERMISSION),对此,官方给我们的建议是使用FileProvider类进行分享。

2). 使用步骤

manifest中声明FileProvider

res/xml中定义对外暴露的文件夹路径

生成content://类型的Uri

给Uri授予临时权限

使用Intent传递Uri

3). AndroidManifest.xml文件声明

android:name="android.support.v4.content.FileProvider"

android:authorities=".fileProvider"

android:grantUriPermissions="true"

android:exported="false">

android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/file_paths"/>

name:provider的类名,若使用默认的v4的FileProvider可使用”android.support.v4.content.FileProvider”,也可以设置为自定义的继承FileProvider的provider类;

authorities:一个签名认证,可以自定义,但在获取uri的时候需要保持一致;

grantUriPermissions:使用FileProvider的使用需要我们给流出的URI赋予临时访问权限(READ和WRITE),该设置是允许我们行使该项权力;

meta-data:meta-data配置的是我们可以访问的文件的路径配置信息,需要使用xml文件进行配置,FileProvider会通过解析xml文件获取配置项,其中name名字不可改变为:android.support.FILE_PROVIDER_PATHS,resource为配置路径信息的配置项目。

4). xml配置

name="my_files"

path="mazaiting/"/>

name="my_cache"

path="mazaiting/"/>

name="external-files-path"

path="mazaiting/"/>

name="name"

path="mazaiting/" />

name="my_external_path"

path="mazaiting/"/>

name="files_root"

path="Android/data//"/>

name="external_storage_root"

path="."/>

f0b2cf0e0353

图1.png

5). 生成Uri

Uri contentUri = FileProvider.getUriForFile(context,

BuildConfig.APPLICATION_ID + ".fileProvider",

new File(path));

6). 授予临时权限

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

7). 传递

intent.setDataAndType(contentUri, "application/vnd.android.package-archive");

8). 安装应用代码

f0b2cf0e0353

图2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值