安卓11上的存储权限问题

news2024/11/27 2:40:34

这篇文章,想来发布的有些晚了,安卓11已经发布多时了,关于安卓11上的存储权限变更的文章数不胜数,所以这篇文章只做为自己的一个简单的记录吧!

在说11之前,我们先回忆以下10上存储权限的变更:每个应用会生成自己对应的沙盒文件路径,自己的应用只能访问自己的文件路径,以及系统提供的公共资源文件夹,而无法访问其它文件夹!

在当targetApi=29时,你有两种选择:

1.适配安卓10的权限变化,判断手机系统版本号,>=29的使用自己的沙盒路径,<29的还按原来的路径(sd卡根目录下自己创建的文件夹路径);

2.不适配安卓10,不修改代码的方式兼容安卓10,有两种方法:
(1)targetApi<29;
(2)targetApi=29,AndroidManifest.xml中的application加入属性:

android:requestLegacyExternalStorage="true"

安卓10上,自己的沙盒路径不需要申请存储权限就可以访问,但如果你的应用内有类似文件管理器(需要访问其它文件夹的能力)的功能时,就仍然要申请存储权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

安卓11上的存储权限变更,进一步收紧对设备上的文件访问权限,如果你的targetApi>29,那么你之前设置的android:requestLegacyExternalStorage="true"将无效,此时你必须适配自安卓10上的权限变更。

并且在安卓11上,即便你申请了READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE,你仍然是无法访问其它文件夹的,那么类似文件管理器的功能将全部失效,那如果应用所需的功能必须要浏览sd卡内的文件就没有任何办法了吗?

有! 谷歌在安卓11上增加了一个权限MANAGE_EXTERNAL_STORAGE:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

但如果你这么写,会有一个警告:

在这里插入图片描述

意思是,你需要添加一个属性:tools:ignore=“ScopedStorage”,忽略ScopedStorage,其实谷歌的本意是安卓10以后,必须要适配ScopedStorage的,11以后进一步限制你对不属于自己应用的文件夹的访问权限的,但你一定要访问,那你就忽略以下我这个强制适配的属性吧,说直白点就是,非必要不申请(非必要,不xx,听着就可怕)!

但MANAGE_EXTERNAL_STORAGE不会像存储权限一样,只要你申请就会弹权限申请框,用户可以方便的选择同意或拒绝!MANAGE_EXTERNAL_STORAGE权限申请不会弹框,在你申请之前,你需要先判断用户是否已经开启了MANAGE_EXTERNAL_STORAGE权限:

Environment.isExternalStorageManager()

已开启则已,未开启时,先用代码申请MANAGE_EXTERNAL_STORAGE权限,申请后会跳转到系统一个单独的页面让用户开启:

在这里插入图片描述

用户如果拒绝,则可以通过intent的action:Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION,跳转至权限授予页请求用户同意!

当然,如果已经开启了MANAGE_EXTERNAL_STORAGE权限,你想访问所有文件,依然要申请READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE。

当targetApi>29时,未添加MANAGE_EXTERNAL_STORAGE权限时,权限设置页是这样的:

在这里插入图片描述

当targetApi>29时,添加了MANAGE_EXTERNAL_STORAGE权限时,权限设置页是这样的:

在这里插入图片描述

这就是MANAGE_EXTERNAL_STORAGE的作用,当用户授予了“所有文件”的权限时,你就可以随意访问其它文件夹了!当然,用户不给这个权限,那就没有办法了…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/92261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GaiaX开源解读 | 给Stretch(Rust编写的Flexbox布局引擎)新增特性,我掉了好多头发

GaiaX&#xff08;盖亚&#xff09;&#xff0c;是在阿里文娱内广泛使用的Native动态化方案&#xff0c;其核心优势是性能、稳定和易用。本系列文章《GaiaX开源解读》&#xff0c;带大家看看过去三年GaiaX的发展过程。 GaiaX的布局方案 - Flexbox 阿里文娱业务作为一个内容分发…

Linux调试器——gdb

gdb什么是gdbdebug与releasegdb的基本操作查看代码与断点执行与调试监视变量什么是gdb 之前用的一直都是VS编译器进行调试&#xff0c;调试是一个非常重要的过程&#xff0c;在Linux中调试需要用到一个工具就是gdb。 在调试思路上VS编译器和gdb是一样的&#xff0c;但是调试过…

【云原生进阶之容器】第一章Docker核心技术1.5.1节——cgroup综述

1. cgroups概述 1.1 为什么需要cgroup 在Linux里,一直以来就有对进程进行分组的概念和需求,比如session group, progress group等,后来随着人们对这方面的需求越来越多,比如需要追踪一组进程的内存和IO使用情况等,于是出现了cgroup,用来统一将进程进行分组,并在分组的…

51单片机——静态数码管实验,小白讲解

数码管介绍&#xff1a; 数码管是一种半导体发光器件&#xff0c;其基本单元是发光二极管。数码管也称LED数码管&#xff0c;不同行业人士对数码管的称呼不一样&#xff0c;其实都是同样的产品。数码管按段数可分为七段数码管和八段数码管&#xff0c;八段数码管比七段数码管多…

中国计算机大会CNCC【笔记】

中国计算机大会CNCC【笔记】前言推荐中国计算机大会CNCCCNCC 青年精英思想秀主题&#xff1a;当呼吸化为空气——物联网安全云原生一站式数据管理与服务 : 构建云计算数据平台生态计算产业未来应用场景与创新方向展望用开源打造云原生数据库的生态系统CCF 优博的培养与成长最后…

华为HI第二款车,阿维塔11的智能化有什么特点?

作者 | 德新 编辑 | 于婷阿维塔11&#xff0c;这款车不用过多介绍&#xff0c;长安 x 宁德 x 华为 3家联合打造。外观独特&#xff0c;在宝马17年的顶尖设计师Nader Faghihzadeh主导的设计&#xff1b;用料也很足&#xff0c;90度 - 116度的电池&#xff0c;34.99万的起售价&am…

利用 ALV 实现增删改查系列之一:让 ALV 报表进入可编辑状态试读版

在 CSDN 和我的知识星球里有朋友向我提出同样的问题&#xff0c;询问如何在 ALV 里实现增删改查操作。 虽然需求只有一句话&#xff0c;但是这个需求背后涉及到的知识点不少&#xff0c;因此笔者会通过几篇文章的篇幅&#xff0c;来介绍这个需求的详细实现步骤。 本文先解决第…

【Linux学习】之访问命令行

【Linux学习】之访问命令行 文章目录【Linux学习】之访问命令行一、基础知识二、练习1.使用 date 命令来显示当前的日期和时间。2.以12小时制显示当前时间(例如&#xff0c;11:42:11AM)。3. 查看/home/student/zcat 的文件类型&#xff0c;是否被人读取?4.使用wc命令和 Bash 快…

看过来,2022最后一期大咖说-大厂可观测来啦~

可观测性的应用创新与落地研讨会 「UGeek大咖说-大厂可观测」 最后一期 活动时间&#xff1a;2022/12/21 15:00 — 17:30 活动平台&#xff1a;线上网络直播间 主办单位&#xff1a;优维科技 内容介绍 白驹过隙&#xff0c;转眼就到了2022年末啦~ 「UGeek大咖说-大厂可观…

A. Tower(暴力 + 看数据范围)

Problem - A - Codeforces 彭教授建造了n个不同高度的积木塔。第i座塔的高度为ai。 寿教授不喜欢这些塔&#xff0c;因为它们的高度是任意的。他决定首先精确地移除其中的m个&#xff0c;然后执行以下一些&#xff08;或不执行&#xff09;操作。 选择一座塔&#xff0c;将其…

MongoDB——Java Client API(Spring Data MongoDB)

[TOC](MongoDB——Java Client API(Spring Data MongoDB)) MongoDB——Java Client API(Spring Data MongoDB) 关于文档注解 由于mongoDB使用是BSON进行存储&#xff0c;Java则是类与对象的概念&#xff0c;所以设计了一套注解用于标注 Document 范围&#xff1a;类 作用&…

表的增删查改基本查询(where-group by-having)

文章目录表的操作表的创建修改表属性&#xff08;轻易不要改&#xff09;数据类型分类类型测试表的增删查改增加插入insert插入否则更新替换Retrieve&#xff08;检索&#xff09;查找selectwhere条件语句的添加姓孙的和孙某where语句无法使用别名的问题&#xff1f;语文成绩&g…

OAK相机depthai最全上手教程

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

一种数据驱动的自动驾驶汽车前馈补偿器优化方法(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 一个可靠的控制器对于自动驾驶汽车的安全和平稳操纵的执行至关重要。控制器必须对外部干扰&#xff08;如路面、天气、风况等&…

javaweb文件下载案例

html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <a href"./img/1.jpg">图片</a> <!--这个下载效果是download实…

pikachu靶场越权漏洞实战

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是pikachu靶场越权漏洞实战。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xff1a;严禁对未…

01背包问题以及有关题目

一、01背包问题详解 确定dp数组以及下标的含义 使用二维数组 dp[i] [j] 表示从下标为[0-i]的物品里任意取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大是多少。 确定递推公式 dp数组的初始化 首先从dp[i][j] 的定义出发&#xff0c;如果背包容量j为0的话&#…

kobject应用实例--在/sys下创建设备的属性节点

本文讲解如何利用内核提供的接口&#xff0c;在/sys下创建设备的属性节点&#xff0c;实现属性的读写接口。 1、主要数据结构 一、kobject --> 目录&#xff1b;kobj_type --> 属性文件 使用到的内核数据结构如下&#xff1a; struct kobject {const char *name;…

1996-2020年31省主要农业机械年末拥有量相关数据

1996-2020年31省主要农业机械年末拥有量 1、时间&#xff1a;1996-2020年 2、范围&#xff1a;包括全国31省 3、指标包括&#xff1a; 农用机械总动力&#xff08;万千瓦&#xff09;、大中型拖拉机&#xff08;台&#xff09;、小型拖拉机&#xff08;台&#xff09;、大中…

jsp+ssm计算机毕业设计本科毕业设计过程管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…