首页
学习
活动
专区
工具
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兼容性适配指南

如果应用以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
  • 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.5K20

    【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.9K20

    Android文件系统整理

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

    83330

    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 地址的网络接口可见。

    13K42

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

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

    4.9K00

    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、将Unity的classes.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.2K10

    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 地址的网络接口可见。

    8K11

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

    中的接 若应用的 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.5K30

    安卓应用安全指南 4.6.1 处理文件 示例代码

    表 4.6-1 按照安全角度的文件类别和比较 文件类别 其它应用的访问权限 储存位置 概述 私有文件 NA 应用目录中 (1)只能在应用中读写,(2)可以处理敏感数据,(3)文件原则上应该是这个类型 只读公共文件...读 应用目录中 (1)其它应用和用户可读,(2)可以处理公开给应用外部的信息 读写公共文件 读写 应用目录中 (1)其它应用和用户可以读写,(2)从安全和应用设计角度来看,不应该使用 外部存储设备(读写文件...原则上,无论存储在文件中的信息是否是公开的,尽可能使用私有文件,当与其他应用交换必要的信息时,应该使用另一个 Android 系统(内容供应器,服务)来完成。...要点: 1) 文件必须在应用目录中创建。 2) 文件的访问权限必须设置为私有模式,以免其他应用使用。 3) 可以存储敏感信息。 4) 对于存储在文件中的信息,请仔细和安全地处理文件数据。...请注意,在 API 级别 1 7及更高版本中,不推荐使用MODE_WORLD_READABLE变量来创建公共文件,并且在 API 级别 24 及更高版本中,会触发安全异常; 因此使用内容供应器的文件共享方法更可取

    34630

    Android 存储空间的最佳实践

    处理媒体文件 这部分内容描述了处理媒体文件 (如视频、图片、音频文件) 的一些常见用例,并概要说明了应用可以使用的方法。...我们制作了一个简单的图片,列出了每种用例以及其在不同系统版本的实践总结: 展示多个文件夹中的图片和视频文件 使用 query() API 查询媒体集合。...迁移应用数据 当您的应用已经做好迁移的准备时,使用以下方法: 检查您应用在工作中是否使用了位于 /sdcard/ 目录或其任何子目录中的文件; 将应用的所有私有文件从现在的 /sdcard/ 下的目录中移动至...如果您的目标平台为 Android 10 (API level 29) 或者更高版本,将您应用 manifest 中的 requestLegacyExternalStorage 属性设置为 "true"...-- 该属性在目标 API 为 Android 10 或更高版本的应用中默认为 "false" --> android:requestLegacyExternalStorage

    1.7K10

    ADB驱动

    如果是32位的系统选择x86文件夹安装驱动,如果是64位系统选择amd64文件。 或者电脑下载豌豆夹客户端,根据提示安装。 ADB包的使用:解压ADB文件夹,将ADB文件夹放到C盘根目录下。...WIN764位用户如果运行 adb shell命令,如出现以下问题: 在命令行中执行ADB后会弹出错误提示:“计算机中丢失AdbWinApi.dll” 在命令行中执行ADB后返回:* daemon not...命令,可以采用以下的方式:   adb shell [command] 如:adb shell ls列出当前目录下的内容。...从电脑上发送文件到设备   adb push 用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机) 6....常用于安装之类的脚本中 adb version             查看adb版本         常和if语句搭配用于检测是否存在adb工具 adb get-state          判断设备状态

    3.7K100
    领券