当前位置: 首页 > article >正文

Android 11 FileProvider的使用和限制

概述:
从Android 7开始,将不允许在app之间,使用file uri,即file://的方式,传递一个file,否则会抛出异常:FileUriExposedException ,其解决方案,就是使用FileProvider,用content://代替file://,同时需要将targetSdk,升级到24。主要用于系统相机拍照及图片裁剪、应用之间数据访问、应用的升级等。

普通应用中使用

  1. 创建FileProvider,继承自FileProvider,这里我用的androidx.core.content.FileProvider
    在这里插入图片描述

  2. 创建file_paths.xml
    在这里插入图片描述
    详细相关配置,可查看fileprovider官网
    在这里插入图片描述

  3. 在AndroidManifest中,配置provider,以及file_paths
    在这里插入图片描述

  4. 使用,这里我们已app升级为例
    在这里插入图片描述

系统应用中使用,就是加了:android:sharedUserId=“android.uid.system”

会发现报异常如下:

会发现这样一条警告日志:

UriGrantsManagerService:ActivityManager: For security reasons, the system cannot issue a Uri permission grant to **** use startActivityAsCaller() instead

,原因是Android 11 ,限制了系统应用对fileProvider的使用,看一下源码,是不是似曾相识:
在这里插入图片描述
注意这里,源码位置,我这边是MTK Android 11的源码,位置不同,是在uri下的 UriGrantsManagerService.java中,而且方法名是checkGrantUriPermissionUnlocked(),并非在AMS中
可以看到,假如我们的app,是系统app或者root app,并且提供的uri的authority不是,“com.android.settings.files”时,打印上述的警告,并返回-1。
修改:
这里我们添加一个条件,可以直接添加我们fileprovider对应的包名
在这里插入图片描述


http://www.kler.cn/a/300662.html

相关文章:

  • 无人机(Unmanned Aerial Vehicle, UAV)路径规划介绍
  • mongoose 支持https踩坑纪实
  • 技术晋升读书笔记—华为研发
  • 关于vite+vue3+ts项目中env.d.ts 文件详解
  • JWT在线解密/解码 - 加菲工具
  • uniapp实现“到这儿去”、拨打电话功能
  • 【redis】redis的特性和主要应用场景
  • 为什么学霸都很淡定,学渣心浮气躁
  • 物联网云平台开发岗位面试经验分享
  • 力扣: 赎金信
  • 如何判断牛血清的好坏?
  • 地面沉降?别慌!静力水准仪来帮忙~
  • 51单片机-蜂鸣器介绍-1
  • SQL Server开启网络访问
  • “跨越数据边界:企业级实时计算平台构想”——2024 DolphinDB 年度峰会演讲回顾
  • 【前端】Flutter vs uni-app:性能对比分析
  • 【自费2W真机测评】三款热门/旗舰宠物空气净化器米家、希喂、352对比试用!
  • 相约华中科技大学,移动云技术论坛来了!NineData创始人CEO叶正盛将分享《数据库全球实时传输技术实践》的主题演讲
  • 八戒:再不上市就要破产了!
  • Zabbix自定义监控项与触发器
  • 解决:Vue 中 debugger 不生效
  • 如何识别和防范跨站脚本攻击(XSS)?
  • Pyspark下操作dataframe方法(2)
  • 【STM32】Cortex-M3的Systick定时器(实现Delay延时)
  • VBA学习(75):电子发票管理小助手/电子发票信息读取
  • ATF UFS初始化笔记