当前位置: 首页 > 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.mrgr.cn/news/24971.html

相关文章:

  • ssl证书如何安装到服务器
  • stm32单片机个人学习笔记1(简单介绍)
  • TESSY创建以及设计一个测试用例
  • 【3.6 神经网络中的输出层】
  • Keras中initializers模块常见模型初始化方法详解
  • wx小程序渗透思路
  • 深度学习算法研究与应用
  • [数据集][目标检测]烟叶病害检测数据集VOC+YOLO格式612张3类别
  • ElementUI 快速入门:使用 Vue 脚手架搭建项目
  • 问:Java反射的原理是什么?如何反射,有哪些场景?
  • 深入理解Java内存模型:对并发编程的影响
  • 1450. 在既定时间做作业的学生人数
  • 智慧物流系统小程序的设计
  • Kotlin中的冷流和热流以及如何让Flow停下来
  • 研发规范之六脉神剑
  • [晕事]今天做了件晕事44 wireshark 首选项IPv4:Reassemble Fragented IPv4 datagrams
  • ORB-SLAM2关键点总结
  • 【人脸检测】SCRFD:训练数据采样和计算分配策略结合的高效人脸检测方法
  • JAVA智能辅导因材施教家教系统小程序源码
  • Python写一个文件自动计数工具