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

如何在android Q及更高版本中将有内容的私有文件夹复制到公共目录?

在Android Q及更高版本中,可以使用MediaStore API将有内容的私有文件夹复制到公共目录。下面是完善且全面的答案:

在Android Q及更高版本中,将有内容的私有文件夹复制到公共目录可以通过以下步骤实现:

  1. 首先,确保你的应用已经获得了READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE权限。
  2. 使用MediaStore API查询私有文件夹中的文件。可以使用ContentResolverquery()方法来实现。例如,如果你的私有文件夹路径是/storage/emulated/0/Android/data/com.example.app/files/,你可以使用以下代码查询文件:
代码语言:txt
复制
Uri privateFolderUri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
String[] projection = {MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DATA};
String selection = MediaStore.Files.FileColumns.DATA + " LIKE ?";
String[] selectionArgs = new String[]{"/storage/emulated/0/Android/data/com.example.app/files/%"};
String sortOrder = null;

Cursor cursor = getContentResolver().query(privateFolderUri, projection, selection, selectionArgs, sortOrder);
  1. 遍历查询结果的Cursor,并将每个文件复制到公共目录。可以使用ContentResolveropenOutputStream()方法获取公共目录中的文件输出流,然后使用InputStreamOutputStream将文件内容复制过去。以下是一个示例代码:
代码语言:txt
复制
while (cursor.moveToNext()) {
    long fileId = cursor.getLong(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID));
    String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));

    try {
        InputStream inputStream = new FileInputStream(filePath);
        OutputStream outputStream = getContentResolver().openOutputStream(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, length);
        }

        inputStream.close();
        outputStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
  1. 最后,记得关闭Cursor

需要注意的是,上述代码仅适用于将私有文件夹中的文件复制到公共图片目录。如果你想复制到其他类型的公共目录,例如音频或视频目录,可以将MediaStore.Images.Media.EXTERNAL_CONTENT_URI替换为相应的URI。

推荐的腾讯云相关产品:腾讯云对象存储(COS)。

腾讯云对象存储(COS)是一种安全、高可靠、低成本的云存储服务,适用于存储和处理各种类型的文件,包括图片、音频、视频、文档等。它提供了简单易用的API和丰富的功能,可以帮助开发者轻松实现文件的上传、下载、管理和分享。

产品介绍链接地址:腾讯云对象存储(COS)

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

相关·内容

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

Android 10(API 级别 29)更高版本为目标平台应用在默认情况下被赋予了对外部存储设备分区访问权限(即分区存储), 对外部存储文件访问方式重新设计,便于用户更好管理外部存储文件。...要点: Android Q文件存储机制修改成了沙盒模式 APP只能访问自己目录文件和公共媒体文件 Android Q版本以下机型,还是使用老文件存储方式 Android Q以上版本机型,所有应用均需要分区存储...1)私有目录 应用私有目录文件访问方式与之前Android版本一致,可以通过File path获取资源。...1)获取(创建)私有目录文件夹 //在自身目录下创建apk文件夹 File apkFile = context.getExternalFilesDir("apk"); 2)创建私有目录文件 生成需要下载路径...主要是在公共目录下创建文件或文件夹拿到本地路径uri,不同Uri,可以保存到不同公共目录

3.3K77

AndroidQ(10)分区存储完美适配方法

本篇主要是对AndroidQ(10)分区存储适配具体实现 要点: Android Q文件存储机制修改成了沙盒模式 APP只能访问自己目录文件和公共媒体文件 对于AndroidQ以下,还是使用老文件存储方式...这里需要注意:在适配AndroidQ时候还要兼容Q系统版本以下,使用SDK_VERSION区分 背景 存储权限 Android Q仍然使用READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE...APP私有目录 地址:/storage/emulated/0/Android/data/包名/files 私有目录存放app私有文件,会随着App卸载而删除。...适配指导 AndroidQ中使用ContentResolver进行文件增删改查 1、获取(创建)自身目录文件夹 获取创建,如果手机没有对应文件夹,则系统会自动生成 //在自身目录下创建...结合上面代码,我们主要是在公共目录下创建文件或文件夹拿到本地路径uri,不同Uri,可以保存到不同公共目录

1.5K40
  • AndroidQ兼容性适配指南

    如果应用以Android 10或更高版本为目标平台,则您必须在应用清单文件声明ACCESS_BACKGROUND_LOCATION权限并接收用户权限,才能在应用位于后台时接收定期位置信息更新。...: doubleArrayOf(0.0, 0.0) } } 访问数据 私有目录: 应用私有目录文件访问方式与之前 Android 版本一致,可以通过 File path 获取资源。...问题分析2: 在Android Q上,使用MediaStore接口只能访问公共目录多媒体文件。 解决方法2: 使用SAF向用户申请文件或目录读写权限,请参见使用SAF选择单个文件。...问题分析: 在Android Q上,由于App-specific目录文件是私有受保护,其他APP无法通过文件路径访问。...设备从Android Q之前版本升级到Android Q,已安装APP获得Legacy View视图。

    7.1K30

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

    权限变更 Android Q 更改了应用对设备外部存储设备文件(:/sdcard )访问方式。...访问私有文件 应用需要将文件存储在应用沙盒中,并且访问这个文件夹无需权限。官方推荐应用在沙盒内存储文件地址为Context.getExternalFilesDir()下文件夹。...卸载后保留应用文件 文件存储在应用私有目录下,在卸载该应用后,系统会清除该应用目录所有文件(有点类似Android/data/xxx目录)。...访问和修改媒体内容 上面已经介绍过了不再重复,需要使用MediaStore 更新其他应用媒体文件 Android Q以前应用都不太关注其它用户组访问应用目录权限,适配Android Q后你会接到厂商要求你限定用户组访问存储目录权限问题单...照片中位置信息 我们拍摄照片一般在Exif元数据包含了位置信息,在Android Q 以前我们可以方便获取到图片位置信息,Android Q 会默认对您应用隐藏此类信息。

    1.5K31

    Android7.0版本影响开发改进分析

    可以使用JobScheduler API ,更多参考后台优化 系统权限更改 为了提高私有文件安全性,面向 Android 7.0或更高版本App私有目录被限制访问(0700)。...此设置可防止私有文件元数据泄漏,它们大小或是否存在(状态)。...App仍可能使用原生API或File API来修改它们私有目录权限。但是Google强烈反对放宽私有目录权限。 传递软件包网域外 file://URI可能给接收器留下无法访问路径。...:必须是true,表示授予 URI 临时访问权限 exported:必须是false resource:@xml/file_paths是我们接下来要添加文件 在res目录下新建一个xml文件夹...在屏幕密度发生更改时,系统不会自动终止针对Android 7.0更高版本开发App;不过这些App仍可能对配置变更做出不良响应。 2.

    87110

    Android 分区存储常见问题解答

    要在 Google Play 上发布,开发者需要将应用 目标 API 级别 (targetSdkVersion) 更新到 API 级别 30 (Android 11) 或者更高版本。...包含敏感或私人信息文件应当存储在 Context#getFilesDir() 所返回目录;而不敏感数据则应存储于 Context#getExternalFilesDir() 所返回目录。...Q: 我可以将非媒体文件放置于其他文件夹 (例如 Downloads 文件夹),而无需任何权限。这是一个 Bug 吗? A: 不是。...如果您应用为了上面提到方式保存文档而请求 READ_EXTERNAL_STORAGE 权限的话,在 Android 11 更高版本中将不必再请求该权限。...创建您自己 DocumentProvider: 这可以让您应用继续处理应用私有目录 ( Context#getFilesDirs() 或 Context#getExternalFilesDirs(

    1.1K10

    【Unity3D插件】AVPro Video插件分享《视频播放插件》

    ,StreamingAssets文件不会被打包到程序资源包,而是作为一个独立目录自动生成在输出程序目录Data目录下 Recent选项可以快速选择之前选择过文件 Browse选项可以快速选择电脑中文件...对于构建这个文件夹应该位于: Windows - 在与你EXE相同级别 Mac -与应用程序包内容文件夹相同 iOS 和AppName级别相同。...数据文件夹文件(编辑器资产文件夹)不会自动复制到构建中,因此您必须手动复制它们。...在使用Unity 5.3或更低版本或Unity 5.4或更高版本时,在不启用单通道VR选项情况下,一定要在场景添加“UpdateStereoMaterial”组件脚本。...我们只支持它通过第三方DirectShow插件Windows(LAV过滤器) 4.快速入门示例 4.1 快速启动:在Unity专家版本快速启动 将视频文件放到StreamingAssets文件夹

    4.4K20

    【Unity3D插件】AVPro Video插件分享《视频播放插件》

    ,StreamingAssets文件不会被打包到程序资源包,而是作为一个独立目录自动生成在输出程序目录Data目录下 Recent选项可以快速选择之前选择过文件 Browse选项可以快速选择电脑中文件...对于构建这个文件夹应该位于: Windows – 在与你EXE相同级别 Mac -与应用程序包内容文件夹相同 iOS 和AppName级别相同。...数据文件夹文件(编辑器资产文件夹)不会自动复制到构建中,因此您必须手动复制它们。...:在使用Unity 5.3或更低版本或Unity 5.4或更高版本时,在不启用单通道VR选项情况下,一定要在场景添加“UpdateStereoMaterial”组件脚本。...我们只支持它通过第三方DirectShow插件Windows(LAV过滤器) 4.快速入门示例 4.1 快速启动:在Unity专家版本快速启动 将视频文件放到StreamingAssets文件夹

    5.6K20

    Android文件系统整理

    内部存储空间 内部存储空间是 App 私有的存储数据存储空间,系统会阻止其他应用对这部分数据访问,并且在 Android 10(API 级别 29)更高版本,系统会对这些位置进行加密。...1、App 私有目录 App 私有目录指其他应用可以访问当前应用该目录数据,应用卸载后也会随之删除。 公共目录:外部可以自由访问,应用删除后这部分存储数据不会删除。...externalMediaDirs: /storage/emulated/0/Android/media/包名 2、外部公共目录 不要被这里“外部”这个词弄糊涂了。...对于这些情况,Android 提供了一种名为“所有文件访问权限”特殊应用访问权限。 例如,防病毒应用主要场景可能是需要定期扫描不同目录许多文件。...MANAGE_EXTERNAL_STORAGE 会授予以下权限: 对公共目录中所有文件读写权限。 对 MediaStore.Files 表内容访问权限。

    81530

    Android Q 适配 之 存储新特性

    背景说明 本文档是基于谷歌安卓 Q beta4 版本变更输出兼容性整改指导,如果后续 beta 版本有新变更和新特性,我们也会刷新文档相关章节内容,请开发者持续关注。 2....解决方法 1:使用 MediaStore 接口访问公共目录多媒体文件,或者使用 SAF 访问公共目录任意文件。...问题分析 2:在 Android Q 上,使用 MediaStore 接口只能访问公共目录多媒体文件。 解决方法 2:使用 SAF 向用户申请文件或目录读写权限。...问题分析:在 Android Q 上,由于 App-specific 目录文件是私有受保护,其他 APP 无法通过文件路径访问。...设备从 Android Q 之前版本升级到 Android Q,已安装 APP 获得 Legacy View 视图。

    1K30

    【权限问题专项】存储权限合理使用场景VS不合理使用场景说明

    首先,我们先对安卓存储目录做个简单介绍。安卓存储分为内部存储、外部存储、系统存储,外部存储又分为私有目录存储、公有目录存储。...在 Android 4.4(API 级别19)或更高版本,应用无需请求任何与存储空间相关权限即可访问外部存储空间中应用私有目录。卸载应用后,系统会移除这些目录存储文件。...获取外部存储共享文件夹路径有九种type,分别对应不同目录,如下: 1.DIRECTORY_MUSIC:音乐类型 2.DIRECTORY_PICTURES:图片类型 3.DIRECTORY_MOVIES...二、读、写外部存储权限不合理使用场景 1.应用本身缓存、日志存储; 2.新闻阅读类:a.缓存文章图片资讯,但是并没有保存、下载资讯图片行为,无需申请读取存储权限;b.下载电子书在私有目录,...无需申请存储权限;c.用户分享网页链接时,无需申请存储权限; 3.游戏类:a.游戏资源包更新;b.加载游戏中广告资源,观看广告视频30S赠送游戏积分、道具; 4.离线缓存至外部存储私有目录/storage

    1K20

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

    2 应用私有目录访问 对于运行在Android 11应用,无论targetSdkVersion是什么都无法访问Emulated存储其他应用私有目录(Android/data)。...SAF(Storage Access Framework)同样也禁止访问应用私有目录。 某些应用核心用例需要访问大量文件,文件管理操作或备份和恢复操作。...MediaColumns.RELATIVE_PATH设置存储路径 Android Q上,通过MediaStore存储到公共目录文件,除了1.3.2.1.2节Uri跟公共目录关系规定每一个存储空间一级目录外...可以从下面几方面着手数据迁移: ● App对于可以存放到公共目录文件,可以通过MediaStore接口存放到对应类型公共目录。 ● 对于私有数据,可以存放到App私有目录。...地址限制 1 背景 在以 API 级别“30”更高版本为目标平台应用,非特权应用(预置或系统应用)将无法访问设备 MAC 地址;只有具有 IPv4 地址网络接口可见。

    12.7K42

    一篇文章彻底明白Android文件存储

    前言 Android中经常需要使用文件存储用户数据 本文将梳理各个版本文件存储,希望能帮上忙。...] 外部存储 示意图 私有目录(private):storage/emulated/0/Android/ 每个应用独占以包名命名私有文件夹 在应用卸载时被删除 对MediaScanner不可见(例外:...多媒体文件夹 API 21) 特点 适用场景:非私密数据,需要随应用卸载删除 公共目录(public):外部存储除了私有目录其他空间 所有应用共享 在应用卸载时不会被删除 对MediaScanner...,在低版本数组只会返回一个元素,指向内置外置存储路径 版本变更:外部存储多媒体文件夹——Context.getExternalMediaDirs()(API 21):对MediaScanner可见...清除应用数据选项(在系统设置或手机管家中): 清除缓存:清除应用内部存储缓存文件夹 与 外部存储缓存文件夹; 清除数据:清除应用内部存储 与 外部存储空间私有目录; 4.2 android:installLocation

    4.8K00

    Android Q Beta 2 已上线!我们来看看都做了哪些更新

    我们目标是在施加访问限制前,为各个有效用例提供可替代公共 API,因此,如果您在 Android 9 Pie 调用接口已列入受限名单,请您为所需接口申请一个新公开 API。...接下来,请您尽快将应用 targetSdkVersion 更新至 'Q',以便在应用测试 Android Q 全部隐私安全特性,以及其它目标平台为 Q 行为变更。...此外,我们还在 Android Q Beta 官网为您准备了许多学习资源,版本说明以及报错指南,欢迎大家前往查看。...如果您想为 Android Q 开发应用,只需将 Android Q Beta SDK 和工具下载到 Android Studio 3.3 (或更高版本),并按照步骤配置开发环境。...如果您想获取 Android Q 行为变更最新修复,建议您使用 Android Studio 3.5 (或更高版本)。

    1K60

    Unity3D与Android交互通信(Unity3D)

    主要内容有如何在Android Studio创建工程,如何设置,以及如何导出。以及在Unity调用Android方法。...jar包 打开build.gradle文件,可以看到最后一行添加成功代码 4、将Unityclasses.jar加载到项目中去 classes.jar这个文件,直接可以在Unity安装目录搜索...脚本 这一行注释掉 2.修改unity_exchange目录mainfests文件AndroidManifest.xml 打开app目录manifests文件夹AndroidManifest.xml...切換到Project视图,可以看到build文件中有一个packaged-classes文件夹,不同版本Android Stuido可能文件夹名字不一样,百度一下就知道了 右键show in...explorer,打开文件夹到当前目录 2.把classes.jar移动到libs文件夹 3.将AndroidManifest.xml和res文件夹复制到这个文件夹 AndroidManifest.xml

    2.1K10

    Android11 (API30)适配

    2应用私有目录访问 对于运行在Android 11应用,无论targetSdkVersion是什么都无法访问Emulated存储其他应用私有目录(Android/data)。...SAF(Storage Access Framework)同样也禁止访问应用私有目录。 某些应用核心用例需要访问大量文件,文件管理操作或备份和恢复操作。...MediaColumns.RELATIVE_PATH设置存储路径 Android Q上,通过MediaStore存储到公共目录文件,除了1.3.2.1.2节Uri跟公共目录关系规定每一个存储空间一级目录外...可以从下面几方面着手数据迁移: ●  App对于可以存放到公共目录文件,可以通过MediaStore接口存放到对应类型公共目录。 ●  对于私有数据,可以存放到App私有目录。...地址限制 1 背景 在以 API 级别“30”更高版本为目标平台应用,非特权应用(预置或系统应用)将无法访问设备 MAC 地址;只有具有 IPv4 地址网络接口可见。

    7.8K11

    非 SDK 接口常见问题 | Android 开发者 FAQ Vol.13

    <28):允许调用深灰名单接 若应用 target SDK 为 Android P 或更高 (即 targetSdkVersion >= 28):深灰名单与黑名单限制相同 黑名单:不论 target...请注意:Beta 2 与最终版 Android P 对非 SDK 接口使用限制基本一致。 API 名单相关问题 Q2: Android P 深灰名单包含哪些内容?...A:深灰名单包含了在开发阶段未被发现使用方法和字段,但我们有可能会有疏漏,所以我们也将一些与公开 SDK 浅灰名单接口密切相关接口也移入了深灰名单。...API 名单相关问题 Q5: 如何在开发者预览版系统映像文件中找到黑名单和灰名单? A:这些名单被编码在平台 dex 文件字段和方法访问标志。系统映像没有包含这些名单单独文件。...关于针对 C 或 C++ 代码 NDK,我们已经在 Android Nougat 做出了限制: Android N 限制使用私有 C/C++ 符号, 提升系统稳定性 相关应用兼容性问题 Q2: 谷歌是否计划限制

    1.4K30

    Android:发布aar包到maven仓库以及 maven插件 和 maven-publish 插件区别

    上面的路径就是在本工程目录下,创建一个 repo 文件夹,用于充当 本地仓库,执行 uploadArchives 任务之后,在工程目录下就可以看到 repo 目录: [wq62vl1xfm.png...] 4、结合 Android Gradle 插件,完成aar包发布 在上面的步骤,publications 闭包有些配置还是不够优雅,比较繁琐,: 配置发布内容(即配置上传 aar 文件...但从 Android Gradle 插件 3.6.0 更高版本(说是这里 classpath 'com.android.tools.build:gradle:3.6.0')之后,也支持 maven-publish...Android Gradle 插件会为应用或库模块每个构建变体工件创建一个组件,您可以使用它来自定义要发布到 Maven 代码库发布内容 Android 插件所创建组件取决于模块是否使用应用或库插件...,而内容Android Gradle 插件生成组件。

    4.4K30
    领券