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

如何在Android中使用ContentResolver查询自定义文件夹中的图片/视频?

在Android开发中,ContentResolver 是一个用于访问内容模型的类,它提供了一种统一的方式来查询、修改和删除存储在设备上的数据。如果你想查询自定义文件夹中的图片或视频,你可以使用 ContentResolver 结合 MediaStore API 来实现。

基础概念

  • ContentResolver: 它是Android系统提供的一个类,用于与内容提供者进行交互。
  • MediaStore: 这是一个内容提供者,用于访问设备上的媒体文件,如图片、视频和音频。

相关优势

  • 统一接口: ContentResolver 提供了一个统一的接口来访问不同来源的数据。
  • 权限管理: 可以通过Android的权限系统来控制对媒体文件的访问。
  • 数据抽象: 开发者不需要关心数据的实际存储位置,只需通过URI来操作数据。

类型与应用场景

  • 图片: 使用 MediaStore.Images.Media 类来查询图片信息。
  • 视频: 使用 MediaStore.Video.Media 类来查询视频信息。
  • 应用场景: 相册应用、社交媒体应用、文件管理器等需要访问用户媒体文件的场景。

示例代码

以下是一个简单的示例代码,展示如何使用 ContentResolver 查询自定义文件夹中的图片和视频:

代码语言:txt
复制
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;

public void queryMediaFiles(ContentResolver contentResolver, String folderPath) {
    // 查询图片
    Uri imagesUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    String[] projection = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA};
    String selection = MediaStore.Images.Media.DATA + " like ?";
    String[] selectionArgs = new String[]{"%" + folderPath + "%"};
    
    Cursor imageCursor = contentResolver.query(imagesUri, projection, selection, selectionArgs, null);
    if (imageCursor != null) {
        while (imageCursor.moveToNext()) {
            String imagePath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
            // 处理图片路径
        }
        imageCursor.close();
    }

    // 查询视频
    Uri videosUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
    Cursor videoCursor = contentResolver.query(videosUri, projection, selection, selectionArgs, null);
    if (videoCursor != null) {
        while (videoCursor.moveToNext()) {
            String videoPath = videoCursor.getString(videoCursor.getColumnIndex(MediaStore.Video.Media.DATA));
            // 处理视频路径
        }
        videoCursor.close();
    }
}

注意事项

  • 权限: 在Android 6.0及以上版本,需要在运行时请求 READ_EXTERNAL_STORAGE 权限。
  • 性能: 查询大量数据时需要注意性能问题,可以使用分页查询来优化。
  • 兼容性: 不同版本的Android系统可能会有不同的行为,需要进行充分的测试。

遇到问题的原因及解决方法

如果查询不到自定义文件夹中的图片或视频,可能的原因包括:

  • 权限未授予: 确保应用已经获得了读取外部存储的权限。
  • 文件夹路径错误: 确认传递给查询函数的文件夹路径是正确的。
  • 数据未索引: 如果媒体文件是新添加的,可能需要一段时间才能被 MediaStore 索引到。

解决方法:

  • 检查并请求必要的权限。
  • 确认文件夹路径是否正确无误。
  • 如果文件是新添加的,可以尝试重新启动设备或者等待一段时间让系统索引文件。

以上就是如何在Android中使用 ContentResolver 查询自定义文件夹中的图片/视频的方法和相关注意事项。

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

相关·内容

【Android Gradle 插件】自定义 Gradle 插件优化图片 ① ( Android 中的 WebP 图片格式使用 | WebP 格式转换 | WebP 参考文档 )

文章目录 一、Android 中的 WebP 图片格式使用 二、WebP 格式转换 三、WebP 参考文档 Android Plugin DSL Reference 参考文档 : Android Studio...Gradle 插件 - GitHub 地址 : https://github.com/han1202012/Android_UI 一、Android 中的 WebP 图片格式使用 ---- 在 Android...图片 使用 lib7zr.so 处理压缩文件 使用 WebP 图片替换 PNG 图片 等方法进行 APK 瘦身 ; 之后的系列文章开始介绍如何使用 自定义 Gradle 插件 , 在编译时将资源中的图片都转为...WebP 格式 ; 注意 : 在低于 Android 3.2 版本的系统中 , WebP 格式无法使用 ; Launcher 图标必须使用 PNG 格式的 ; 9patch 图片不能转为 WebP 格式的...; 使用 WebP 格式的图片 的前提是 API 版本需要大于 14 ; 使用 带透明度通道 的 WebP 格式的图片 的前提是 API 版本需要大于 18 ; Android Studio 自带 WebP

1.4K10

AndroidQ兼容性适配指南

以下代码段展示了如何在应用中请求在后台访问位置信息: 的) 通过ContentResolver.query接口查询文件Uri,查询其他App创建的文件是需要READ_EXTERNAL_STORAGE权限; 该查询使用的是手机系统的数据库查询,可能会出现有些图片文件存在但是依旧查询不到...APP可以实现自定义ContentProvider来向外提供APP私有文件。 一般的文件管理类的软件都会使用自定义的DocumentsProvider。...无法访问图片文件中的地理位置数据 问题原因: 直接从图片文件输入流中解析地理位置数据。 问题分析: 由于图片的地理位置信息涉及用户隐私,Android Q上默认不向APP提供该数据。...使用DocumentsProvider 详见使用自定义DocumentsProvider 相关API使用问题 MediaStore DATA字段不再可靠 在Android Q中DATA(即_data)

7.1K30
  • Agora SDK 在Android中的使用(在线视频通话)

    的视频通信示例) 以前看一个Android项目先看AndroidManifest.xml,我更喜欢先把文件夹内的结构树打印出来 打印文件夹内的结构树可详见:杂篇-从整理文件发起的杂谈[-File-]...1、配置项目 项目的配置如图,将依赖包以及.so文件放在对应位置 为了方便些,将res文件夹的资源拷贝一下 2、配置APP ID 3.视频通话Activity的分析 一共也就200多行,还包括一大坨权限申请的代码...通过不断测试(用网+短信查询): 1.它和网络有关 2.只要上网,GPRS流量就会减少 3.文字消耗的流量很少,图片消耗的流量较多 4.下载多大的文件就会消耗多大的GPRS流量 5.进制1M=1024KB...一年前还是个连流量都不知道是什么的人,却能在短时间内融入这个网络时代,也许就是年轻人的优势吧 很快,QQ就支持视频通话了,那遥不可及的梦如梦般降临,而我就这么幸运的站在梦中 由于我的专业需要使用很多软件...经历几次后,感觉也看淡了,都是些数据而已,也没必要去较真,也就不玩游戏了 4.真正踏入网络时代 作为一名使用者,我可以贪婪的享受着网络中的一切便利,但我越来越感到,只是这样是不够的 网络对我来说仅是一个黑盒

    1.5K10

    Agora SDK 在Android中的使用(在线视频通话)

    一.集成 1.注册账号创建项目 其中最重要的要数 App ID 了 2.下载Agora SDK 二、学会看示例代码(可跳过) 1.整体了解项目结构(1v1的视频通信示例) 以前看一个Android...项目先看AndroidManifest.xml,我更喜欢先把文件夹内的结构树打印出来 打印文件夹内的结构树可详见:杂篇-从整理文件发起的杂谈[-File-] |---app |---.gitignore...--README.md |---README.zh.md |---settings.gradle 2.查看最项目的settings.gradle和build.gradle(最外层) 如果你想导入AS中查看...,可以看一下com.android.tools.build:gradle的版本修改一下 ---->[settings.gradle]----------------看一下项目包含的模块-------...、配置项目 项目的配置如图,将依赖包以及.so文件放在对应位置 为了方便些,将res文件夹的资源拷贝一下 2、配置APP ID 3.视频通话Activity的分析 一共也就200多行,还包括一大坨权限申请的代码

    1.5K40

    在android中资源文件夹中添加一个新的图片资源

    刚刚看了一下一个帧布局的简单Android示例,纠结了半天不知道如何将图片加到resource中的drawable中去。    ...比如在一个TestDemo的Res/drawable文件夹中,新添加一张图片资源要如何添加。    ...我直接将图片复制到bin\res\drawable-hdpi或者bin\res\drawable-mdpi中去,然后在eclipse中刷新图片仍然不显示。    ...上网找到了关于加载图片资源的问题解决办法: 直接拷贝需要添加的图片资源,然后在Res/drawable文件夹 右键点击 选择“粘贴”即可把图片拷贝进去。...下面是一个简单的帧布局Android应用实例,实现一只小鸟飞翔的动画效果,参考了《大话企业级Android应用开发实战》15.2.5帧布局(FrameLayout) P110-113页。

    3.1K20

    Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果

    今天我的这篇文章使用的是LruCache这个类(之前写了一篇使用LruCache加载网络图片的Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅)以及对图片进行相对应的裁剪...接下来我们就来实现这些效果吧,首先我们新建一个项目,取名ImageScan 首先我们先看第一个界面吧,使用将手机中的图片扫描出来,然后根据图片的所在的文件夹将其分类出来,并显示所在文件夹里面的一张图片和文件夹中图片个数...,我们根据界面元素(文件夹名, 文件夹图片个数,文件夹中的一张图片)使用一个实体对象ImageBean来封装这三个属性 [java] view plain copy package com.example.imagescan...中,我们先要将图片按照文件夹进行分类,我们使用了HashMap来进行分类并将结果存储到mGruopMap(Key是文件夹名,Value是文件夹中的图片路径的List)中,分类完了关闭Cursor并利用Handler...设置item点击事件,点击文件夹跳转到展示文件夹图片的Activity, 我们需要传递每个文件夹中的图片的路径的集合 看GroupAdapter的代码之前,我们先看一个比较重要的类,本地图片加载器NativeImageLoader

    3.6K20

    Android | 作用域存储适配

    但是这个文件夹中的文件会随着应用卸载而被随之删除。 ​ 那如果需要访问其他目录怎么办呢,比如获取相册中的图片,向相册中添加一张图片。...为此,Android 系统针对系统文件类型进行了分类**:图片,音频,视频 这三类文件可以通过 MediaStore API 来进行访问,这种称为共享空间,其他的系统文件需要使用 系统的文件选择器来进行访问...,** ​ 另外,如果程序向媒体库写入图片,视频,音频,将会自动用于读写权限,不需要额外申请权限,如果你要读取其他程序向媒体贡献的图片,视频,音频,则必须要申请 READ_EXTERNAL_STORAGE...拍照完成后,拿到对应的 uri 如果要直接显示图片,则通过 uri 可直接加载 如果图片要上传,则需要将 uri 处理为一个 file 对象 ​ 在 10.0 中,只能访问沙箱文件和共享文件夹...,需要注意的是:共享文件夹可以通过 uri 进行访问,如拿到输入/输出流等。

    79220

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

    这是摘自官方文档的一段话,我们可以把「分区存储」简单解释为,Android 10 开启分区存储后,你的应用在有权限的情况下也无法随便访问其他外部存储空间中的公有文件夹了 2....`,这明显为外部存储空间中的文件夹,且不是应用专属文件,这时在图片加载框架层就会抛出异常java.io.FileNotFoundException。...正当我兴奋地觉得马上要完工的时候,点了一下视频预览 ......v=RjyYCUW-9tY&feature=youtu.be image.png 视频中对我们有用的信息大概是这样,在 Android 10 的时候,很多开发者都反应了类似的问题,在使用一些 native...,确实找到了一小段不起眼的文字 使用直接文件路径和原生库访问文件 为了帮助您的应用更顺畅地使用第三方媒体库,Android 11 允许您使用除 MediaStore API 之外的 API 通过直接文件路径访问共享存储空间中的媒体文件

    1.7K30

    Android ContentProvider实例详解

    而且Android为常见的一些数据提供了默认的ContentProvider(包括音频、视频、图片和通讯录等)。...集合记录: vnd.android.cursor.dir/自定义 单条记录: vnd.android.cursor.item/自定义 vnd表示这些类型和子类型具有非标准的、供应商特定的形式。...Android中类型已经固定好了,不能更改,只能区别是集合还是单条具体记录,子类型可以按照格式自己填写。 在使用Intent时,会用到MIME,根据Mimetype打开符合条件的活动。...中帮助我们过滤,分辨出查询者想要查询哪个数据表。...4ContentResolver ContentResolver通过URI来查询ContentProvider中提供的数据。除了URI以 外,还必须知道需要获取的数据段的名称,以及此数据段的数据类型。

    2.4K20

    【Android 文件管理】分区存储 ( 创建与查询图片文件 )

    文章目录 一、分区存储模式下使用 MediaStore 插入图片 二、分区存储模式下使用 MediaStore 查询图片 三、相关文档资料 Android 分区存储系列博客 : 【Android 文件管理...MediaStore 文件操作 ) 一、分区存储模式下使用 MediaStore 插入图片 ---- 在上一篇博客 【Android 文件管理】分区存储 ( MediaStore 文件操作 ) 中 ,...唯一的区别就是需要设置 MIME_TYPE 字段 , 根据传入的图片格式设置不同的 mimetype , 如 : 传入 jpeg 图片 , 则设置字段值为 “image/jpg” ; 保存图片文件时..., 使用 SQLite 查询机制 , 查询对应图片的 Uri ; 查询 Pictures 目录下的 image.jpg 图片 ; // 拼接查询语句 var selection: String = "..., 如 : 访问图片 , 删除图片 等操作 , 必须使用 Uri 进行操作 ; 三、相关文档资料 ---- Android 文件处理参考文档 : 数据和文件存储概览 : https://developer.android.google.cn

    1.1K20

    Agora SDK 在Android中的使用(在线视频通话)| 掘金技术征文

    (可跳过) 1.整体了解项目结构(1v1的视频通信示例) 以前看一个Android项目先看AndroidManifest.xml,我更喜欢先把文件夹内的结构树打印出来 打印文件夹内的结构树可详见:杂篇...项目 ---- 1、配置项目 项目的配置如图,将依赖包以及.so文件放在对应位置 为了方便些,将res文件夹的资源拷贝一下 ---- 2、配置APP ID ---- 3.视频通话Activity...通过不断测试(用网+短信查询): 1.它和网络有关 2.只要上网,GPRS流量就会减少 3.文字消耗的流量很少,图片消耗的流量较多 4.下载多大的文件就会消耗多大的GPRS流量 5.进制1M=1024KB...一年前还是个连流量都不知道是什么的人,却能在短时间内融入这个网络时代,也许就是年轻人的优势吧 很快,QQ就支持视频通话了,那遥不可及的梦如梦般降临,而我就这么幸运的站在梦中 由于我的专业需要使用很多软件...经历几次后,感觉也看淡了,都是些数据而已,也没必要去较真,也就不玩游戏了 ---- 4.真正踏入网络时代 作为一名使用者,我可以贪婪的享受着网络中的一切便利,但我越来越感到,只是这样是不够的 网络对我来说仅是一个黑盒

    1.4K40

    Carson带你学Android:关于ContentProvider的知识都在这里了!

    (如通讯录、日程表等等)和自定义数据库 关于 系统预置URI 此处不作过多讲解,需要的同学可自行查看 此处主要讲解 自定义URI // 设置URI Uri uri = Uri.parse("content.../table/# 4.2 MIME数据类型 作用:指定某个扩展名的文件用某种应用程序来打开 如指定.html文件采用text应用程序打开、指定.pdf文件采用flash应用程序打开 具体使用.../自定义 // 形式2:多条记录(集合) vnd.android.cursor.dir/自定义 // 注: // 1. vnd:表示父类型和子类型具有非标准的、特定的形式。...(Uri uri) // 得到数据类型,即返回当前 Url 所代表数据的MIME类型 Android为常见的数据(如通讯录、日程表等)提供了内置了默认的ContentProvider 但也可根据需求自定义...运行需要访问数据的进程2 在进程2中,我们先向ContentProvider中插入数据,再查询数据 至此,关于ContentProvider在进程内 & 进程间的使用讲解完毕。

    44810

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

    为此,Android系统针对文件类型进行了分类,图片、音频、视频这三类文件将可以通过MediaStore API来进行访问,而其他类型的文件则需要使用系统的文件选择器来进行访问。...开源库地址是:https://github.com/guolindev/ScopedStorageDemo 获取相册中的图片 首先来学习一下如何在作用域存储当中获取手机相册里的图片。...注意,虽然本篇文章中我是以图片来举例的,但是获取音频、视频的用法也是基本相同的。...而在之前的系统版本中并没有RELATIVE_PATH,所以我们要使用DATA常量(已在Android 10中废弃),并拼装出一个文件存储的绝对路径才行。...使用文件选择器 如果我们要读取SD卡上非图片、音频、视频类的文件,比如说打开一个PDF文件,这个时候就不能再使用MediaStore API了,而是要使用文件选择器。

    2.2K10

    Android:关于ContentProvider的知识都在这里了!

    找到对应的ContentProvider & 其中的数据,再进行数据操作 具体使用 URI分为 系统预置 & 自定义,分别对应系统内置的数据(如通讯录、日程表等等)和自定义数据库 1..../自定义 // 形式2:多条记录(集合) vnd.android.cursor.dir/自定义 // 注: // 1. vnd:表示父类型和子类型具有非标准的、特定的形式。...(Uri uri) // 得到数据类型,即返回当前 Url 所代表数据的MIME类型 Android为常见的数据(如通讯录、日程表等)提供了内置了默认的ContentProvider 但也可根据需求自定义...中插入数据 resolver2.insert(uri_job,values2); // 通过ContentResolver 向ContentProvider中查询数据...运行准备数据的进程1 在进程1中,我们准备好了一系列数据 ? 运行需要访问数据的进程2 在进程2中,我们先向ContentProvider中插入数据,再查询数据 ?

    2.5K32

    【Android 文件管理】分区存储 ( 修改与删除图片文件 )

    文章目录 一、分区存储模式下使用 MediaStore 修改图片 二、分区存储模式下使用 MediaStore 删除图片 三、相关文档资料 Android 分区存储系列博客 : 【Android 文件管理...】分区存储 ( 创建与查询图片文件 ) 中 , 使用 MediaStore 在外置存储 SD 卡中的 Pictures 目录中 , 创建 了 image.jpg 图片文件 , 并进行了 查询 ; 本篇博客讲解使用...修改为 image_update.jpg ; 分区存储机制中 , 删除图片文件 , 不能通过获取其绝对路径进行删除 , 必须先使用 MediaStore 查询到图片文件的 Uri , 然后通过 Uri...方法获取 ContentResolver , 调用 update 方法 , 更新图片 Uri 对应的数据 , 将上述 ContentValues 更新到 Uri 对应的数据库表中 ; // 修改图片.../ 目录下的 image_update.jpg 文件删除 ; 分区存储机制中 , 删除图片文件 , 不能通过获取其绝对路径进行删除 , 必须先使用 MediaStore 查询到图片文件的 Uri , 然后通过

    2.6K20

    Android11 (API30)适配

    查询文件 通过ContentResolver,根据不同的Uri查询不同的内容: 1.3.2.1.5.读取文件 通过ContentResolver query接口,查找出来文件后如何读取,可以通过下面的方式...存储 -> Virtual SD,进行初始化 1.4.规范愿景 我们希望三方应用,尤其是TOP应用,能够按照分区存储的规范,将用户数据(例如图片、视频、音频等)保存在公共目录,把应用数据保存在SDCARD...此前,Android系统提供了多种SDK接口(主要在PMS中,如getInstalledPackages(0)等),使app能轻易获取其他app的信息。...2 兼容性影响 如果您的应用以Android 11为目标运行平台时,后台使用自定义view的toast消息将不能显示,可能会影响用户交互的完整性。...系统也不会传递无障碍按钮回调事件到自定义的AccessibilityService中。

    8K11

    Android点将台:济世儒侠

    [4]简单看一下Android系统如何实现短信的ContentProvider [5]如何自定义一个ContentProvider,来给别的应用使用 一、ContentProvider的查询功能(短信为例...主要储存在external.db(外部)和internal.db(内部)两个数据库中 数据库中图片的主要字段有: _id:id标识 _data: 图片绝对路径...一共12540张图片,方法耗时:1.289秒,属于耗时操作应该放在子线程 可以获取数据库中的字段,封装一个图片的实体类,以便使用 private ArrayList queryAllImg...,所以图片会操作,那两个也不在话下 三、通讯录的查询 权限自理:android:name="android.permission.READ_CONTACTS"/>...接下来看一下短信的ContentProvider在Android系统中是怎样实现的。

    20610

    安卓开发_深入理解Content Provider

    ContentResolver应该使用Content Provider中的哪一个数据表 3、  URI: content://com.xqx.mycontent/dba/010 (1)content:/...:查看或更新通话记录 Contacts: :获取修改或保存联系人信息 MediaStore:访问图片视频音乐等 2、  查询数据 如果想查询Content Provider数据,必须需要三个信息 (1...3、  增加记录 (1)       向ContentProvider中添加数据,需要使用ContentValues对象建立键值对映射,键位Content Provider中的字段,值为要添加的值 (2..., 11) 为删除URI 中id为11的记录 五、  自定义Content Provider 1、  我们从上面了解了开发人员可以使用系统给定的ContentProvide 当然我们也可以自定义ContentProvider...来共享自己的数据(当然也可以使用系统预定义的ContentProvider,管理相同的数据并且有写入权限,也可修改对应数据) 自定义ContentProvider步骤 (1)、建立数据存储系统

    71840

    AndroidR兼容性适配指南

    那么使用原生的Toast~! 消息框回调 如果您希望在消息框(文本消息框或自定义消息框)出现或消失时收到通知,请使用 Android 11 中添加的 addCallback() 方法。...如果您希望自己的应用使用特定的第三方相机应用来代表其捕获图片或视频,可以通过为 intent 设置软件包名称或组件来使这些 intent 变得明确。...软件包可见性 Android 11 中的软件包可见性 Android 11 更改了应用查询用户已在设备上安装的其他应用以及与之交互的方式。...查询特定软件包及与之交互 如果您知道要查询或与之交互的一组特定应用(例如,与您的应用集成的应用或您使用其服务的应用),请将其软件包名称添加到 元素内的一组 元素中...5G 可通过一些方法增强您的应用,其中包括: 由于 5G 在速度和延迟方面的改进,自动使当前的体验更快更好。 提升用户体验,如通过显示 4k 视频或下载分辨率更高的游戏资产。

    2.1K20
    领券