首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android Q (10)请求许可才能访问所有存储空间。作用域存储

基础概念

Android Q(API 级别 29)引入了一个新的存储模型,称为“作用域存储”(Scoped Storage)。这个模型的主要目的是为了更好地保护用户的隐私和数据安全,通过限制应用程序对存储空间的访问权限。

作用

  1. 隐私保护:限制应用程序对存储空间的访问,防止未经授权的数据访问和泄露。
  2. 数据管理:提供更细粒度的数据管理,允许用户更好地控制自己的数据。
  3. 兼容性:为了保持与旧版本Android的兼容性,Android Q提供了一个过渡模式,允许应用程序在新的存储模型下运行,同时仍然可以访问旧的存储路径。

类型

  1. 应用专属存储:每个应用程序都有自己的私有存储空间,只能被该应用程序访问。
  2. 共享存储:应用程序可以在共享存储空间中存储文件,这些文件可以被其他应用程序访问,但需要适当的权限。
  3. 媒体存储:专门用于存储媒体文件(如图片、视频和音频),可以通过MediaStore API访问。

应用场景

  1. 文件管理:应用程序需要管理用户文件时,可以使用作用域存储来确保文件的隐私和安全。
  2. 多媒体处理:处理图片、视频和音频文件时,可以使用MediaStore API来访问共享存储中的媒体文件。
  3. 数据备份和恢复:在备份和恢复数据时,可以使用作用域存储来确保数据的完整性和安全性。

遇到的问题及解决方法

问题:请求许可才能访问所有存储空间

原因:Android Q引入了作用域存储模型,限制了应用程序对存储空间的访问权限。为了保护用户隐私,应用程序需要显式请求访问存储空间的权限。

解决方法

  1. 请求权限:在AndroidManifest.xml文件中声明所需的权限,并在运行时请求用户授权。
代码语言:txt
复制
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
代码语言:txt
复制
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE);
}
  1. 适配作用域存储:修改应用程序代码,以适应新的存储模型。例如,使用MediaStore API来访问媒体文件,而不是直接访问文件路径。
代码语言:txt
复制
ContentResolver contentResolver = getContentResolver();
Uri collection;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL);
} else {
    collection = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
}

Cursor cursor = contentResolver.query(collection, null, null, null, null);
if (cursor != null) {
    while (cursor.moveToNext()) {
        // 处理图片
    }
    cursor.close();
}
  1. 过渡模式:如果应用程序需要兼容旧版本的Android,可以使用过渡模式,在新的存储模型下运行,同时仍然可以访问旧的存储路径。
代码语言:txt
复制
<application
    android:requestLegacyExternalStorage="true"
    ...>
    ...
</application>

参考链接

通过以上方法,可以有效地解决Android Q中请求许可才能访问所有存储空间的问题,并确保应用程序的兼容性和数据安全。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 10适配要点,作用域存储

本篇文章对作用域存储进行了比较全面的解析,相信看完之后你将能够轻松地完成Android 10作用域存储的适配升级。...理解作用域存储 Android长久以来都支持外置存储空间这个功能,也就是我们常说的SD卡存储。...另外,存储在SD卡上的文件属于公有文件,所有的应用程序都有权随意访问,这也对数据的安全性带来了很大的挑战。 为了解决上述问题,Google在Android 10当中加入了作用域存储功能。...而在作用域存储这个功能上面,恭喜大家,暂时确实是可以不用升级的。 目前Android 10系统对于作用域存储适配的要求还不是那么严格,毕竟之前传统外置存储空间的用法实在是太广泛了。...第三方SDK不支持作用域存储怎么办? 阅读完了本篇文章之后,相信你对Android 10作用域存储的用法和适配基本上都已经掌握了。

2.2K10

Android 14新特性,选择性照片和视频访问授权

本地读写权限指的是App拥有对手机外置公共存储空间(SD卡)读取和写入的能力。 Android 1.0 远古时代的Android系统对于权限方面是非常宽松的。...Android 4.4 Android 1.6系统只是对写入公共存储空间有了限制,读取公共存储空间的文件仍然是不受限制的。...Android 10引入了Scoped Storage机制,App被禁止使用绝对路径访问公共存储空间。这样,用户设备上的隐私信息可以得到更好的保护。...将这个属性设置为true,那么App仍然可以使用绝对路径访问公共存储空间。 关于Android 10更多的行为变更,可以参考 Android 10适配要点,作用域存储 这篇文章。...App只需要申请READ_EXTERNAL_STORAGE权限之后,即可访问手机公共存储空间的照片、视频、音频,用户无法以更细的颗粒度对App进行授权。

2.6K21
  • google官方推荐的隐私最佳实践!

    请将您的应用设计为在用户未授予“始终允许”访问位置信息的权限时,针对可用的功能适当降级。在 Android 10 及更高版本中,用户可以将应用的位置信息访问权限限制为仅在应用使用期间允许访问。...如果在用户离开应用界面后,应用需要继续访问位置信息才能执行用户启动的持续性任务,请在应用进入后台之前启动前台服务。...对于传输中的所有数据(无论是不是敏感数据),您都应使用 TLS(SSL 的继任协议)进行传输。 包含敏感数据的文件应位于内部存储空间内的应用私有目录中。...在 Android 10 中,对于仅与您的应用相关的文件,请将其存储在外部存储设备中的应用专属目录中。详细了解分区存储。 如果您需要将敏感数据传递给另一个应用,请使用显式 intent。...对于绝大多数非广告用例,使用作用域仅限于应用的私密存储全局唯一 ID (GUID)。 使用安全设置 Android ID (SSAID) 在您拥有的应用之间共享状态,而无需要求用户登录帐号。

    1.1K20

    数据结构之动态内存管理机制

    在图 1 的基础上,假设表 L1 不再使用,而 L2 和 L3 还在使用,若释放表 L1,L1 中的所有结点所占的存储空间都会被释放掉,L2 和 L3 中由于同样包含 L1 中的结点,两个表会被破坏,某些指针会产生悬挂访问的错误...解决存储空间可能成为无用单元或者产生悬挂访问的方法有两个: 每个申请的存储空间设置一个计数域,这个计数域记录的是指向该存储空间的指针数目,只有当计数域的值为 0 时,该存储空间才会被释放。...在初始状态下,所有的存储空间全部标志为 0,被占用时标记为 1); 依次遍历所有的存储空间,将所有标记为 0 的存储空间链接成一个新的可利用空间表。...对正在被占用的存储空间进行标记的方法有三种: 从当前正在工作的指针变量开始,采用递归算法依次将所有表中的存储结点中的标志域全部设置为 1; 第一种方法中使用递归算法实现的遍历。...则分配后存储空间的效果为: 回收算法 由于系统中的可利用空间始终都是一个连续的存储空间,所以回收时必须将用户释放的存储块合并到这个堆上才能够重新使用。

    10110

    Android | 作用域存储适配

    前言 Android 10 已经发布了很长一段时间了,并且 Android 11 已经有很大一部分人在使用了,那么你的程序对他做了适配吗?...在 10.0 中,作用域存储变得非常重要,这个新的功能颠覆了我们一直惯用外置存储的方式,因此大量的 app 都面临着代码的适配 本篇文章对作用域存储,以及如何进行适配,做了比较详细的介绍 在 7.0...SD卡进行共享 复制代码 ​ 然而上面这种真的好吗,对用开发者而且这算是好处吧,但是对用用户而言,上述的无疑一些流氓作用,因为开发者完全可以访问的内存中的所有位置,并作出一些改变...作用域存储 ​ 10.0 中,为了解决上述问题, google 在 Android 10 中加入了作用域功能 ​ 什么是作用域呢?...就是 Android 系统对 SD 卡做了很大的限制,从 10.0 开始,每个程序只能有权在自己的外置存储空间关联的目录下读取和创建相应的文件,也称作沙箱。

    79220

    AndroidQ兼容性适配指南

    AndroidQ android10.jpeg Android 10 中的隐私权变更 隐私权变更 受影响的应用 缓解策略 ✅ 分区存储 针对外部存储的过滤视图,可提供对特定于应用的文件和媒体集合的访问权限...不可重置的设备标识符实施了限制 从 Android 10 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE 特许权限才能访问设备的不可重置标识符(包含 IMEI 和序列号)。...为了让用户更好地控制自己的文件,并限制文件混乱的情况,Android Q修改了APP访问外部存储中文件的方法。...Scoped Storage.png 存储空间视图模式 Android Q规定了APP有两种外部存储空间视图模式:Legacy View、Filtered View。...而android:requestLegacyExternalStorage="true"让适配了Android10的app新安装在Android 10系统上也继续访问旧的存储模型。

    7.1K30

    WordPress基于腾讯云COS存储站点图片及跨域解决方法

    昨天我把站点内的所有图片 copy 了一份到腾讯云的 COS 存储,腾讯云 COS 对象存储是腾讯云为企业和个人开发者们提供的一种能够存储海量数据的分布式存储服务,用户可随时通过互联网对您的大量数据进行批量存储和处理...免费额度 资源类型 资源子类型 每月免费额度 存储空间 存储空间 50 GB 流量 外网下行流量 10 GB 流量 腾讯云 CDN 回源流量 10 GB 请求 读请求 100 万次 请求 写请求 100...头之类的东西,解决方法: 在你的腾讯 COS 源的 CDN 中添加 HTTP Header 配置, Access-Control-Allow-Origin:* 在你的存储桶的基础设置中设置跨域访问 CORS...,配置如下 跨域访问 CORS 设置 就可以去除这个报错信息了。...原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:WordPress基于腾讯云COS存储站点图片及跨域解决方法

    5K30

    Android 10(Q)11(R) 分区存储适配

    Android 存储分区情况 Android 中存储可以分为两大类:私有存储和共享存储 私有存储 (Private Storage) : 每个应用在都拥有自己的私有目录,其它应用看不到,彼此也无法访问到该目录...Android 10(Q) Android 10 中主要对共享目录进行了权限详细的划分,不再能通过绝对路径访问。 受影响的接口: ?...Android 11 (R) Android 11 (R) 在 Android 10 (Q) 中分区存储的基础上进行了调整。 1....使用直接文件路径和原生库访问文件 为了帮助您的应用更顺畅地使用第三方媒体库,Android 11 允许您使用除 MediaStore API 之外的 API 访问共享存储空间中的媒体文件。...应用可通过执行以下操作向用户请求名为所有文件访问权限的特殊应用访问权限: 在清单中声明 MANAGE_EXTERNAL_STORAGE 权限。

    2.4K30

    androidmanifest.xml作用_android读取xml数据

    APK访问共享数据的。...preferExternal,系统会优先考虑将APK安装到SD卡上(当然最终用户可以选择为内部ROM存储上,如果SD存储已满,也会安装到内部存储上) 选择auto,系统将会根据存储空间自己去适应 选择internalOnly...:name=”package名称.子包名成.androidMain” L、android:permission 设置许可名,这个属性若在上定义的话,是一个给应用程序的所有组件设置许可的便捷方式,当然它是被各组件设置的许可名所覆盖的...的Activity理论上属于相同的Task,应用程序默认的affinity的名字是元素中设定的package名 Q、android:theme 是一个资源的风格,它定义了一个默认的主题风格给所有的activity...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.4K20

    很全很全的前端本地存储讲解

    我们可以设置cookie生效的域(当前设置cookie所在域的子域),也就是说,我们能够操作的cookie是当前域以及当前域下的所有子域 一个域名下存放的cookie的个数是有限制的,不同的浏览器存放的个数不一样...服务端设置 注:一定的是同域之间的访问,不能把domain的值设置成非主域的域名。...,会话本地存储 特点: 用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。...在这里面,我们可以创建和删除对象存储空间以及构建和删除索引。 2、构建数据库 IndexedDB 使用对象存储空间而不是表,并且一个单独的数据库可以包含任意数量的对象存储空间。...语法: 第一个参数是事务希望跨越的对象存储空间的列表,可以是数组或者字符串。如果你希望事务能够跨越所有的对象存储空间你可以传入一个空数组。 如果你没有为第二个参数指定任何内容,你得到的是只读事务。

    1.3K70

    Android 存储概览

    于是从Android 10(API 29)开始有了分区存储的概念,应用在默认情况下就能访问外部存储空间上自己的专属目录,以及本应用所创建的特定类型的媒体文件(使用MediaStore API,下面会讲到...此时,如果应用在运行时请求与存储相关的权限,将会弹出请求对话框(动态申请)表明应用正在请求对外部存储空间的广泛访问权限。...Android 11(API 30)开始更进一步,干脆将 WRITE_EXTERNAL_STORAGE 权限的作用抹除(即使声明了该权限也没用)。...除访问自己的媒体文件外,访问其它应用的媒体文件需要权限——在 Android 11(API 30)或更高版本中,需要 READ_EXTERNAL_STORAGE;在 Android 10(API 29)...其它文件 自 Android 4.4(API 19)始,官方提供了存储访问框架,便于应用与外部存储卷和云端存储空间在内的文档提供器互动。

    9210

    Android文件系统整理

    不同的存储类别扮演了不同的角色,比如 App 的私有存储空间是无法被外部访问的,可以用来存储一些 App 私有的敏感信息;共享的存储空间可以存储一些所有应用都可以访问的文件,例如媒体、文档等可公开的文件...内部存储空间 内部存储空间是 App 私有的存储数据的存储空间,系统会阻止其他应用对这部分数据的访问,并且在 Android 10(API 级别 29)及更高版本中,系统会对这些位置进行加密。...内部存储空间的特性让它很适合存储只有 App 本身才能访问的敏感数据。...应用可以通过执行以下操作向用户请求“所有文件访问权限”: 1、在清单中声明 MANAGE_EXTERNAL_STORAGE 权限。...获得此权限的应用仍然无法访问属于其他应用的内部存储空间,因为这些目录在存储卷上显示为 Android/data/ 的子目录。

    83330

    Android被曝严重相机漏洞!锁屏也能偷拍偷录,或监视数亿用户

    据外媒报道,Checkmarx的安全研究团队发现了安卓手机的漏洞,攻击者通过访问手机存储空间就可以绕过Android权限,在不需要获取用户同意的情况下,就可以远程控制手机进行远程拍照、录制视频、监视对话...能够做到这一点的影响非常严重,以至于Android开源项目(AOSP)专门拥有一组权限,任何应用程序都必须向用户请求这些权限并获得许可,然后才能启用这类操作。...为此,他们创建了一个恶意应用程序,利用了最常请求的权限之一:存储访问。...恶意应用请求的权限仅是“存储访问” “这个运行在Android智能手机上的恶意应用程序可以读取SD卡,”Yalon说,“它不仅可以访问过去的照片和视频,而且利用这种新的攻击方法,可以随意拍摄新的照片和视频...除了基本的存储访问权限外,这个应用程序不需要任何特殊的权限。该应用程序不太可能引起用户的警觉,因为只需请求这样一个简单、普通的许可。

    2K20

    Android 11 中的存储机制更新

    Android 10 引入了对外部存储权限的更改,旨在更好地保护用户数据以及降低应用的存储空间。Android 11 开发者预览版里加入了更多改进,以帮助开发者更好地适应这些权限修改。...目标 API 级别 (Target SDK Level) 设定为 Android 10 的应用无需请求 Storage 权限,就可以使用自己的外部存储目录并管理媒体集合 (音频、视频、图片和下载数据)。...Android 10 对外部存储权限行为 developer.android.google.cn/training/da… 改进媒体存储 Android 10 中要求所有应用都使用 MediaStore...在实际的运行中,依赖原始文件路径的 I/O 请求会被重定向到使用 MediaStore API,当使用这种方式访问本应用存储空间之外的文件时,这次重定向会造成性能影响。...在 Android 10 中,应用在对每一个文件请求编辑或删除时都必须得到用户的确认。而在 Android 11 中,应用可以一次请求修改或者删除多个媒体文件。

    3.1K11

    Android 11 应用兼容性适配,看这篇就够了

    MediaColumns.RELATIVE_PATH设置存储路径 Android Q上,通过MediaStore存储到公共目录的文件,除了1.3.2.1.2节Uri跟公共目录关系中规定的每一个存储空间的一级目录外...2 如果可用的存储空间不足,使用 intent action —ACTION_CLEAR_APP_CACHE 呈现UI界面让用户确认后,触发所有应用的缓存清理。...● 如果应用未选择停用分区存储,并且请求 READ_EXTERNAL_STORAGE 权限,则用户会看到不同于 Android 10 的对话框。该对话框会指示应用正在请求访问相册和多媒体。...如果以上三个条件都不满足,无论应用的targetSdkVersion是什么,都需要再次请求该权限,才能访问相关数据。...上述列出了 Android 10(API 级别 29)中列入灰名单而目前在 Android 11 中受限的所有非 SDK 接口。

    13.1K42

    Android 新特性_Android10使用

    3.4 作用域目录访问 在Android N 中,应用可以使用新的 API 请求访问特定的外部存储目录,包括可移动媒体上的目录,如 SD 卡。...应用可以使用这些 API(而不是使用 READ_EXTERNAL_STORAGE),其授予所有存储目录的访问权限或存储访问框架,从而让用户可以导航到目录。...若要使用作用域目录访问来访问可移动介质上的目录,首先要添加一个用于侦听 MEDIA_MOUNTED 通知的 BroadcastReceiver,例如 android:name="...网络安全配置 ICU4J Android 框架 API 作用域目录访问 Android for Work 更新 画中画 TV 录制 https://developer.android.com/preview...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    1.2K20

    【Android开发高级系列】AndroidManifest.xml专题

    APK分配一个唯一的UserID,所以是默认禁止不同APK访问共享数据的。...,系统将会根据存储空间自己去适应         选择internalOnly是指必须安装到内部才能运行 (注:需要进行后台类监控的APP最好安装在内部,而一些较大的游戏APP最好安装在SD卡上。...D、android:debuggable         这个从字面上就可以看出是什么作用的,当设置为true时,表明该APP在手机上可以被调试。...L、android:permission         设置许可名,这个属性若在上定义的话,是一个给应用程序的所有组件设置许可的便捷方式,当然它是被各组件设置的许可名所覆盖的。     ...Q、android:theme         是一个资源的风格,它定义了一个默认的主题风格给所有的activity,当然也可以在自己的theme里面去设置它,有点类似style。

    89750

    AndroidR兼容性适配指南

    Android 11 存储常见问题解答 强制执行分区存储 在 Android 11 上运行但以 Android 10(API 级别 29)为目标平台的应用仍可请求 requestLegacyExternalStorage...管理设备存储空间 从 Android 11 开始,使用分区存储模型的应用只能访问自身的应用专用缓存文件。如果您的应用需要管理设备存储空间,请按照关于如何查询可用空间的说明操作。...,Android 11(API 级别 30)及更高版本允许您使用 MediaStore API 以外的 API 来访问共享存储空间中的媒体文件。...访问应用专属目录 //分区存储空间,/data/data/package/files val file = File(context.filesDir, filename) //应用专属外部存储空间...在 Android 10 上,作用域存储环境中的应用无法使用文件路径访问文件。为了与此设计保持一致,我们当时弃用了 DATA 列。

    2.1K20
    领券