Android MediaStore访问的外部存储公共空间都不需要申请权限,这些目录具体指的是哪些

news2025/4/19 2:08:34

在 Android 10 及更高版本中,通过 MediaStore 访问以下 ​​外部存储公共目录​​ 时,如果操作的是应用自己创建的文件,则​​无需申请存储权限​​。这些目录属于系统明确定义的媒体集合,具体包括:

1. 媒体类型目录​

​​​​1. 图片(Images)​​ MediaStore.Images.Media /DCIM/、/Pictures/
应用可自由读写自己创建的图片文件,无需权限;读取其他应用的图片需 READ_MEDIA_IMAGES 权限。
​​2. 视频(Video)​​ MediaStore.Video.Media /DCIM/、/Movies/、/Pictures/
应用可自由读写自己创建的视频文件,无需权限;读取其他应用的视频需 READ_MEDIA_VIDEO 权限。
​​3. 音频(Audio)​​ MediaStore.Audio.Media /Music/、/Alarms/、/Podcasts/ 等
应用可自由读写自己创建的音频文件,无需权限;读取其他应用的音频需 READ_MEDIA_AUDIO 权限。
​​4. 下载文件(Downloads)​​ MediaStore.Downloads (仅 Android 10+) /Download/
应用可自由读写自己创建的下载文件,无需权限;​​无法直接访问其他应用的非媒体文件​​(需通过 SAF)。

2. 关键说明

​1. 权限豁免条件​​
仅当文件由当前应用创建时,通过 MediaStore 访问上述目录​​无需任何权限​​。例如:相机应用保存照片到 /DCIM/ 无需申请 WRITE_EXTERNAL_STORAGE。
若需访问其他应用创建的媒体文件(如图库中的照片),仍需动态申请 READ_MEDIA_IMAGES 等细粒度权限。
2. ​​非媒体文件限制​​
MediaStore ​​不支持直接操作非媒体文件​​(如 PDF、TXT 等)。若需访问 /Download/ 中的非媒体文件,必须使用 ​​Storage Access Framework (SAF)​​。
​​3. 卸载与权限变化​​
应用卸载后,其创建的公共目录文件会变为“无主文件”。重新安装后访问这些文件时,需要申请 READ_EXTERNAL_STORAGE 权限,视为访问其他应用的文件。

3. 目录路径与代码示例​

       // 写入图片到 Pictures 目录(无需权限)
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.DISPLAY_NAME, "my_image.jpg");
        values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES);
        Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        if (uri != null) {
            try (FileOutputStream fos = (FileOutputStream)
                    getContentResolver().openOutputStream(uri)) {
                if (fos != null) {
                    fos.write("Java MediaStore Test my_image.jpg".getBytes());
                    Log.d("StorageTest", "Java MediaStore写入 my_image.jpg 成功: " + uri.toString());
                }
            } catch (Exception e) {
                Log.e("StorageTest", "Java MediaStore写入 my_image.jpg 失败", e);
            }
        }

        // 写入文件到 Download 目录(无需权限)
        ContentValues downloadValues = new ContentValues();
        downloadValues.put(MediaStore.Downloads.DISPLAY_NAME, "my_file.txt");
        downloadValues.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);
        Uri downloadUri = getContentResolver().insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, downloadValues);
        if (downloadUri != null) {
            try (FileOutputStream fos = (FileOutputStream)
                    getContentResolver().openOutputStream(downloadUri)) {
                if (fos != null) {
                    fos.write("Java MediaStore Test my_file.txt".getBytes());
                    Log.d("StorageTest", "Java MediaStore写入 downloadUri 成功: " + downloadUri.toString());
                }
            } catch (Exception e) {
                Log.e("StorageTest", "Java MediaStore写入 downloadUri 失败", e);
            }
        }

4. 总结

通过 MediaStore 访问以下目录时,应用对自己创建的文件无需权限:

​​图片​​:DCIM/、Pictures/
​​视频​​:DCIM/、Movies/
​​音频​​:Music/、Alarms/ 等
​​下载文件​​:Download/(仅限媒体文件)​

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

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

相关文章

LabVIEW真空度监测与控制系统

开发了一种基于LabVIEW的真空度信号采集与管理系统,该系统通过图形化编程语言实现了真空度的高精度测量和控制。利用LabVIEW的强大功能,研制了相应的硬件并设计了完整的软件解决方案,以满足工业应用中对真空度监测的精确要求。 项目背景 随着…

虚拟dom工作原理以及渲染过程

浏览器渲染引擎工作流程都差不多,大致分为5步,创建DOM树——创建StyleRules——创建Render树——布局Layout——绘制Painting 第一步,用HTML分析器,分析HTML元素,构建一颗DOM树(标记化和树构建)。 第二步,用…

数据采集爬虫三要素:User-Agent、随机延迟、代理ip

做爬虫的朋友都懂:你刚打开一个页面,还没来得及发第二个请求,服务器已经把你当成了“可疑流量”。403、429、验证码、JS挑战……这些“欢迎仪式”你是不是也经常收到?防爬策略越来越猛,采集工程师越来越秃。 但别慌&am…

汽车的四大工艺

文章目录 冲压工艺核心流程关键技术 焊接工艺核心流程 涂装工艺核心流程 总装工艺核心流程终检与测试静态检查动态检查四轮定位制动转鼓测试淋雨测试总结 简单总结下汽车的四大工艺(从网上找了一张图,感觉挺全面的)。 冲压工艺 将金属板材通过…

【JVM是什么?JVM解决什么问题?JVM在JDK体系中是什么?虚拟机和JVM、操作系统是什么关系?】

1. JVM 是什么? JVM(Java Virtual Machine,Java 虚拟机) 是一个虚拟的计算机程序,它是 Java 程序运行的核心环境。JVM 的主要职责是加载、验证、解释或编译 Java 字节码(.class 文件)&#xff…

10-MySQL-性能优化思路

1、优化思路 当我们发现了一个慢SQL的问题的时候,需要做性能优化,一般我们是为了提高SQL查询更快,一个查询的流程由下图的各环节组成,每个环节都会消耗时间,要减少消耗时候需要从各个环节都分析一遍。 2 连接配置优化 第一个环节是客户端连接到服务端,这块可能会出现服务…

MySQL学习笔记十

第十二章汇总数据 12.1聚集函数 聚集函数运行在行组上,计算和返回单个值。 12.1.1AVG()函数 输入: SELECT AVG(prod_price) AS avg_price FROM products; 输出: 说明:AVG()函数通过对表中行数计数并计算特定列值之和&#…

Redis快的原因

1、基于内存实现 Redis将所有数据存储在内存中,因此它可以非常快速地读取和写入数据,而无需像传统数据库那样将数据从磁盘读取和写入磁盘,这样也就不受I/O限制。 2、I/O多路复用 多路指的是多个socket连接;复用指的是复用一个线…

如何在React中集成 PDF.js?构建支持打印下载的PDF阅读器详解

本文深入解析基于 React 和 PDF.js 构建 PDF 查看器的实现方案,该组件支持 PDF 渲染、图片打印和下载功能,并包含完整的加载状态与错误处理机制。 完整代码在最后 一个PDF 文件: https://mozilla.github.io/pdf.js/web/compressed.tracemo…

【完美解决】VSCode连接HPC节点,已配置密钥却还是提示需要输入密码

目录 问题描述软件版本原因分析错误逻辑链 解决方案总结 问题描述 本人在使用 ​​VSCode Remote-SSH 插件​​连接超算集群节点时,遇到以下问题:已正确配置 SSH 密钥,且 VSCode 能识别密钥文件(如图1),但在…

【JSON2WEB】16 login.html 登录密码加密传输

【JSON2WEB】系列目录 【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSO…

从递归入手一维动态规划

从递归入手一维动态规划 1. 509. 斐波那契数 1.1 思路 递归 F(i) F(i-1) F(i-2) 每个点都往下展开两个分支,时间复杂度为 O(2n) 。 在上图中我们可以看到 F(6) F(5) F(4)。 计算 F(6) 的时候已经展开计算过 F(5)了。而在计算 F(7)的时候,还需要…

轻量级爬虫框架Feapder入门:快速搭建企业级数据管道

一、目标与前置知识 1. 目标概述 本教程的主要目标是: 介绍轻量级爬虫框架 Feapder 的基本使用方式。快速搭建一个采集豆瓣电影数据的爬虫,通过电影名称查找对应的电影详情页并提取相关信息(电影名称、导演、演员、剧情简介、评分&#xf…

golang gmp模型分析

思维导图: 1. 发展过程 思维导图: 在单机时代是没有多线程、多进程、协程这些概念的。早期的操作系统都是顺序执行 单进程的缺点有: 单一执行流程、计算机只能一个任务一个任务进行处理进程阻塞所带来的CPU时间的浪费 处于对CPU资源的利用&…

【算法竞赛】树上最长公共路径前缀(蓝桥杯2024真题·团建·超详细解析)

目录 一、题目 二、思路 1. 问题转化:同步DFS走树 2. 优化:同步DFS匹配 3. 状态设计:dfs参数含义 4. 匹配过程:用 map 建立权值索引 5. 终止条件:无法匹配则更新答案 6. 总结 三、完整代码 四、知识点总…

【windows10】基于SSH反向隧道公网ip端口实现远程桌面

【windows10】基于SSH反向隧道公网ip端口实现远程桌面 1.背景2.SSH反向隧道3.远程连接电脑 1.背景 ‌Windows 10远程桌面协议的简称是RDP(Remote Desktop Protocol)‌。 RDP是一种网络协议,允许用户远程访问和操作另一台计算机。 远程桌面功…

Python----概率论与统计(贝叶斯,朴素贝叶斯 )

一、贝叶斯 1.1、贝叶斯定理 贝叶斯定理(Bayes Theorem)也称贝叶斯公式,是关于随机事件的条件概率的定理 贝叶斯的的作用:根据已知的概率来更新事件的概率。 1.2、定理内容 提示: 贝叶斯定理是“由果溯因”的推断&…

爬虫抓包工具和PyExeJs模块

我们在处理一些网站的时候, 会遇到一些屏蔽F12, 以及只要按出浏览器的开发者工具就会关闭甚至死机的现象. 在遇到这类网站的时候. 我们可以使用抓包工具把页面上屏蔽开发者工具的代码给干掉. Fiddler和Charles 这两款工具是非常优秀的抓包工具. 他们可以监听到我们计算机上所…

无人机击落技术难点与要点分析!

一、技术难点 1. 目标探测与识别 小型化和低空飞行:现代无人机体积小、飞行高度低(尤其在城市或复杂地形中),雷达和光学传感器难以有效探测。 隐身技术:部分高端无人机采用吸波材料或低可探测设计,进…

8.第二阶段x64游戏实战-string类

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:7.第二阶段x64游戏实战-分析人物属性 string类是字符串类,在计算机中…