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

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.lryc.cn/news/439320.html

相关文章:

  • 闭包+面试真题
  • Java企业面试题3
  • 第3章C/C++流程控制
  • 这是一款很棒的AI录音机——Plaud NotePin,但是它注定失败
  • self-play RL学习笔记
  • 【机器学习】OpenCV入门与基础知识
  • JUC学习笔记(二)
  • 炫酷HTML蜘蛛侠登录页面
  • 算法里面的离散化
  • Https AK--(ssl 安全感满满)
  • ERROR: Failed building wheel for cython_bbox | pip install cython_bbox 失败【解决方案】
  • 逻辑与位运算的双面舞者:、、|、||深度解析
  • 中断门+陷阱门
  • RTMP直播播放器的几种选择
  • 初识爬虫1
  • 【趣学Python算法100例】兔子产子
  • HTTP 四、HttpClient的使用
  • C语言:结构体变量
  • bibtex是什么
  • 【大模型专栏—进阶篇】智能对话全总结
  • MVC应用单元测试以及请求参数的验证
  • 算法:TopK问题
  • .json文件的C#解析,基于Newtonsoft.Json插件
  • 四、(JS)JS中常见的加载事件
  • [网络]https的概念及加密过程
  • React 嵌套类名样式不生效
  • 20Kg载重30分钟续航多旋翼无人机技术详解
  • 详解c++:认识类
  • HTML5中的重要元素详解
  • 八股文知识汇总(常考)