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

Android 10 (Android Q):如何因外部存储更改而解压缩文件(没有android:requestLegacyExternalStorage)

Android 10引入了一项新的存储权限策略,即Scoped Storage(作用域存储),以提高应用数据的安全性和隐私保护。在Android 10中,如果应用需要访问外部存储(例如SD卡)上的文件,应该使用Scoped Storage来进行文件操作。

在Android 10中,如果应用没有声明android:requestLegacyExternalStorage权限,即不使用传统的外部存储权限模式,那么应用将无法直接访问外部存储上的文件。但是,仍然有一些方法可以通过Scoped Storage来解压缩文件。

一种方法是使用ACTION_OPEN_DOCUMENT_TREE意图来请求用户授予应用对外部存储的访问权限。通过此意图,应用可以让用户选择一个目录,然后应用将能够访问该目录及其子目录中的文件。然后,应用可以使用标准的Java文件操作API来解压缩文件。

另一种方法是使用ContentResolverDocumentFile类来进行文件操作。首先,应用可以使用ContentResolveropenOutputStream()方法创建一个输出流,然后使用标准的Java文件操作API将解压缩的文件写入该输出流。类似地,应用可以使用ContentResolveropenInputStream()方法创建一个输入流,然后使用标准的Java文件操作API从输入流中读取文件。

需要注意的是,以上方法都需要在AndroidManifest.xml文件中声明适当的权限,例如<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云对象存储(COS):提供安全、稳定、低成本的云端存储服务,适用于存储和处理大规模非结构化数据。详情请参考:https://cloud.tencent.com/product/cos
  • 腾讯云移动推送(TPNS):为移动应用提供高效、稳定、可靠的消息推送服务,帮助开发者实现消息推送功能。详情请参考:https://cloud.tencent.com/product/tpns
  • 腾讯云云服务器(CVM):提供弹性、安全、稳定的云端服务器,适用于各种应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等,帮助开发者构建智能化应用。详情请参考:https://cloud.tencent.com/product/ai
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

相册适配 Android 11 绕的那些弯路

分区存储 为了让用户更好地管理自己的文件并减少混乱,以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被赋予了对外部存储空间的分区访问权限(即分区存储)。...此类应用只能访问外部存储空间上的应用专属目录,以及本应用所创建的特定类型的媒体文件。...在搭载 Android 9(API 级别 28)或更低版本的设备上,只要其他应用具有相应的存储权限,任何应用都可以访问外部存储空间中的应用专属文件。...为了让用户更好地管理自己的文件并减少混乱,以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被授予了对外部存储空间的分区访问权限(即分区存储)。...这是摘自官方文档的一段话,我们可以把「分区存储」简单解释为,Android 10 开启分区存储后,你的应用在有权限的情况下也无法随便访问其他外部存储空间中的公有文件夹了 2.

1.6K30

Android-读写权限变更记录

android:requestLegacyExternalStorage="true" 是一个用于在 Android 10(API 级别 29)及以上版本中启用传统外部存储权限模式的应用程序清单属性,Android...Android 11(API 级别 30) 后,默认获取权限可以通过context.getExternalFilesDir 获取外部存储的,/storage/emulated/0/Android/data...即使你声明了 READ_EXTERNAL_STORAGE 权限,你的应用程序也只能访问自己的媒体文件存储在媒体库中的公共文件。...获取全部文件的读写权限,或者使用 context.getExternalFilesDir() 方法获取外部存储空间的应用程序目录/storage/emulated/0/Android/data/包名/...文件外部存储方法1: Environment.getExternalStorageDirectory() 使用 context.getExternalFilesDir() 代替;- 优点:不需要权限申请

1K20

AndroidQ分区存储权限变更及适配的实现

分区存储Android Q中引入了分区储存功能,在外部存储设备中为每个应用提供了一个“隔离存储沙盒”。其他应用无法直接访问应用的沙盒文件。...权限变更 Android Q 更改了应用对设备外部存储设备中的文件(如:/sdcard )的访问方式。...选择停用分区存储Android Q设备上有两种方式来让分区存储生效: 以 Android 9 或更低版本为目标平台 (Target SDK <=28) 如果Target SDK 28,请在manifest...中添加android:requestLegacyExternalStorage=“true” 这样就可以采用原有的存储策略。...访问和修改媒体内容 上面已经介绍过了不再重复,需要使用MediaStore 更新其他应用的媒体文件 Android Q以前应用都不太关注其它用户组访问应用目录权限,适配Android Q后你会接到厂商要求你限定用户组访问存储目录权限问题单

1.5K31

Android 11 中的存储机制更新

Android 10 引入了对外部存储权限的更改,旨在更好地保护用户数据以及降低应用的存储空间。Android 11 开发者预览版里加入了更多改进,以帮助开发者更好地适应这些权限修改。...Android 10 所带来的关于存储上的变更遵循了以下三个基本原则 更好的从属性: 系统知道哪些文件属于哪些应用,这可以让用户更方便地管理他们的文件。...目标 API 级别 (Target SDK Level) 设定为 Android 10 的应用无需请求 Storage 权限,就可以使用自己的外部存储目录并管理媒体集合 (音频、视频、图片和下载数据)。...Android 10外部存储权限行为 developer.android.google.cn/training/da… 改进媒体存储 Android 10 中要求所有应用都使用 MediaStore...您需要在应用的 Manifest 文件里添加 requestLegacyExternalStorage 属性,以保证 Android 10 的用户也可以使用该特性。

2.9K11

AndroidR兼容性适配指南

Android 10 为目标平台且未将 requestLegacyExternalStorage 设为 true 以停用分区存储的应用 更新您的应用以使用分区存储详细了解分区存储变更 ✅ 单次授权使用单次授权功能...Android 11 存储常见问题解答 强制执行分区存储Android 11 上运行但以 Android 10(API 级别 29)为目标平台的应用仍可请求 requestLegacyExternalStorage...访问外部存储设备上的应用专用目录 在 Android 11 上,应用无法再访问外部存储设备中的任何其他应用的专用于特定应用的目录中的文件。...因此在 Android 11 上,具有读取外部存储权限的应用程序能够访问范围存储环境中具有文件路径的文件。...在 Android 10 设备上,这对范围存储环境中的应用程序不可用,除非它们通过设置 android:requestLegacyExternalStorage 清单属性选择退出。

2K20

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

为此,Google 终于下定决心在 Android 10 中引入了分区存储,对权限进行场景的细分,按需索取,并在 Android 11 中进行了进一步的调整。...: 内部存储私有目录 (/data/data/packageName); 外部存储私有目录 (/sdcard/Android/data/packageName), 共享存储 (Shared Storage...Android 10(Q) Android 10 中主要对共享目录进行了权限详细的划分,不再能通过绝对路径访问。 受影响的接口: ?...Android 11 (R) Android 11 (R) 在 Android 10 (Q) 中分区存储的基础上进行了调整。 1....Q:我可以在媒体集文件夹下创建文档,就可以避开权限的问题了? A:官方文档上写了只能创建相应类型的媒体/文件,具体如何限制的,没有说明。

2.2K30

AndroidQ兼容性适配指南

AndroidQ android10.jpeg Android 10 中的隐私权变更 隐私权变更 受影响的应用 缓解策略 ✅ 分区存储 针对外部存储的过滤视图,可提供对特定于应用的文件和媒体集合的访问权限...为了让用户更好地控制自己的文件,并限制文件混乱的情况,Android Q修改了APP访问外部存储文件的方法。...与Android Q以前一样,申请权限后App可访问外部存储,拥有完整的访问权限 requestLegacyExternalStorage和preserveLegacyExternalStorage requestLegacyExternalStorage...android:requestLegacyExternalStorage="true"让适配了Android10的app新安装在Android 10系统上也继续访问旧的存储模型。...无法访问存储设备上的文件 问题原因1: 直接使用路径访问公共目录文件。 问题分析1: 在Android Q上,APP默认只能访问外部存储设备上的App-specific目录。

6.9K30

上架Google Play应用如何适配Android 11?

Android 10 中,Google首次引入了分区存储。分区存储是需要以 Android 10 为目标平台,系统默认强制执行。...如果在 AndroidManifest 中添加了 requestLegacyExternalStorage=true 标志,就可以不受此限制。...但是当 target API 更新为 30 (Android 11)后,系统会忽略该配置。 平台适配 1. 引擎存储协议适配:引擎提供的存储协议fs://  , cache://,引擎会进行适配。...大部分模块是基于引擎协议fs:// 开发,因此需要适配的模块很少。 应用适配 1. 如果是文件管理,文档管理类应用,需要添加manageStorage模块,申请 “所有文件访问权限”。...(例如进行拍照录制视频等需要使用摄像头,以前的缺省处理中不需要申请摄像头权限,开启动态权限后,必须在进行拍照之前,判断是否有摄像头权限,没有则进行申请,只有用户同意了摄像头权限才能进行接下来拍照的操作

99100

干货 | 携程Android 10适配踩坑指南

Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被赋予了对外部存储设备的分区访问权限(即分区存储), 对外部存储文件访问方式重新设计,便于用户更好的管理外部存储文件。...要点: Android Q文件存储机制修改成了沙盒模式 APP只能访问自己目录下的文件和公共媒体文件 Android Q版本以下机型,还是使用老的文件存储方式 Android Q及以上版本机型,所有应用均需要分区存储..., 所以应用需要提前确保支持分区存储 需要注意:在适配AndroidQ的时候还要兼容Q系统版本以下的,使用SDK_VERSION区分 2.2 新特性概览 2.2.1 外部存储 外部存储被分为应用私有目录以及共享目录两个部分...: 应用私有目录:存储应用私有数据,外部存储应用私有目录对应Android/data/packagename,内部存储应用私有目录对应data/data/packagename; 共享目录:存储其他应用可访问文件...2.4 兼容模式 应用未完成外部存储适配工作,可以临时以兼容模式运行, 兼容模式下应用申请存储权限,即可拥有外部存储完整目录访问权限,通过Android10之前文件访问方式运行,以下两种方法设置应用以兼容模式运行

3.2K77

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

另外,存储在SD卡上的文件属于公有文件,所有的应用程序都有权随意访问,这也对数据的安全性带来了很大的挑战。 为了解决上述问题,Google在Android 10当中加入了作用域存储功能。...如果你的targetSdkVersion已经指定成了29,也没有关系,假如你还不想进行作用域存储的适配,只需要在AndroidManifest.xml中加入如下配置即可: <manifest ......而在之前的系统版本中并没有RELATIVE_PATH,所以我们要使用DATA常量(已在Android 10中废弃),并拼装出一个文件存储的绝对路径才行。...Android 10开始,我们已经不能以绝对路径的方式访问外置存储空间了,所以文件下载功能也会受到影响。 那么该如何解决呢?主要有以下两种方式。...第一种同时也是最简单的一种方式,就是更改文件的下载目录。将文件下载到应用程序的关联目录下,这样不用修改任何代码就可以让程序在Android 10系统上正常工作。

2.1K10

Android 11新特性,Scoped Storage又有了新花样

10适配要点,作用域存储 。...其实如果你的应用程序已经按照 Android 10适配要点,作用域存储 这篇文章中讲解的方式对Scoped Storage进行了适配,那么恭喜你,现在你什么都不需要做,就已经能够适配Android 11...这类程序本身提供的功能就是对SD上的文件进行浏览与管理,强制启用了Scoped Storage之后,本质上就没有文件浏览的概念了,我们也无法以文件的真实路径来对文件进行管理。...这些功能我在 Android 10适配要点,作用域存储 这篇文章中都进行了演示。 但是,假如你要修改其他应用程序所贡献的数据,那不好意思,Scoped Storage是不允许你这样做的。...这确实是个头疼的问题,而且我觉得主要是由于Google一开始在Android 10中API设计不合理所导致的。依赖于异常捕获机制的方案,无论如何都不能说是一种出色的API设计。

1.3K20

Android 10 适配攻略小结

1.Scoped Storage(分区存储) 说明 在Android 10之前的版本上,我们在做文件的操作时都会申请存储空间的读写权限。...为了解决这个问题,Android 10 中引入了 Scoped Storage 的概念,通过添加外部存储访问限制来实现更好的文件管理。 首先明确一个概念,外部储存和内部储存。...因为在下一个版本的Android中,此条配置将会失效,将强制采用外部储存限制。其实早在Android Q Beta 3之前都是强制的,但为了给开发者适配的时间才没有强制执行。...如果你的应用没有该权限,却仍然使用了以上的方法,则返回的结果会目标 SDK 版本而异: 如果应用以 Android 10 或更高版本为目标平台 ,则会发生 SecurityException 。...参考 OPPO – Android Q版本应用兼容性适配指导 面向开发者的 Android 10 用阿里巴巴APP的案例,教你如何快速适配「深色模式」 到此这篇关于Android 10 适配攻略小结的文章就介绍到这了

1.8K32

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

一、隐私更新 2.1 存储 2.1.1 分区存储 1.1. 背景 Android 11 进一步增强了平台功能,为外部存储设备上的应用和用户数据提供了更好的保护。...兼容影响 当您将应用更新为以 Android 11 为目标平台后,您将无法使用requestLegacyExternalStorage,而且也没有其他标记可以提供停用分区存储。...● App targetSdkVersion < 29,默认为分区存储,可通过requestLegacyExternalStorage更改 应用可以通过AndroidManifest.xml设置requestLegacyExternalStorage...SDCARD私有目录,以更好地保护外部存储上的应用和用户数据。...上述列出了 Android 10(API 级别 29)中列入灰名单目前在 Android 11 中受限的所有非 SDK 接口。

11.8K42

详解Android10的分区存储机制(Scoped Storage)适配教程

因为Google的缺席,导致Android生态野蛮生长,导致很多开发规范没有完全被落实。...以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被赋予了对外部存储设备的分区访问权限(即分区存储), 对外部存储文件访问方式重新设计,便于用户更好的管理外部存储文件。...翻译成通俗语言,不管是使用requestLegacyExternalStorage=true的方式以兼容模式运行还是降低targetSDK都无法在接下来2020年的Android(API 29)10更新中被豁免...此应用无需请求与存储相关的用户权限,即可以查看外部存储中以下类型的文件: 应用外部特定目录中的文件(使用getExternalFilesDir()访问)。...分区存储将影响在Android10系统首次安装启动、且targetSdkVersion =29的应用。需要访问和共享外部存储文件的应用会受到影响,需要进行兼容性适配。

3.1K32

Android 内存优化】Android 原生 API 图片压缩代码示例 ( PNG 格式压缩 | JPEG 格式压缩 | WEBP 格式压缩 | 动态权限申请 | Android10 存储策略 )

文章目录 一、 图片质量压缩 二、 图片尺寸压缩 三、 Android 10 文件访问 四、 完整源码示例 上一篇博客 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能...10 文件访问 ---- 文件存储相关官方参考资料 : Android 11 中的存储机制更新 Android storage use cases and best practices 应用数据和文件...将图片压缩后 , 存储到 SD 卡中 , 这里 涉及到了在 Android 10 系统中动态申请权限 , 设置旧的存储访问策略 ( 该策略将在 Android 11 中无效 ) ; 这里简要介绍暂时性的解决方案...Android 11 中废弃 ; android:requestLegacyExternalStorage="true" ③ 完整配置 : <application

69420
领券