Android - 以上升的时间顺序检索图像和视频

标签 android provider

是否可以按时间升序检索提供者 MediaStore.Images.ImageColumns 和 MediaStore.Video.VideoColumns 的所有图像和视频?

为了更准确地解释,我需要一个包含所有视频和图像的列表,每个元组包含以下属性:id、日期、名称、纬度、经度、路径、mimeType、数据。

但是这些信息分为三个表,每种媒体一个:MediaStore.MediaColumns、Images.ImageColumns 和 MediaStore.Video.VideoColumns。

是否可以一次查询?

我认为一种解决方案是查询 MediaStore.MediaColumns 表中的 ID(按时间升序排列),然后对于获得的每个 ID,根据 MediaStore 中的 mimetype 在特定表中执行一次查询。如果是图片则在 Images.ImageColumns 中,如果是视频则在 MediaStore.Video.VideoColumns 中...

时间上的上升顺序对我来说很重要。先查询图片再查询视频的解决方案不太方便...我不想对两个列表结果进行分类...

如果你能帮助我,非常感谢!

最佳答案

通常我会建议您使用 UNION 操作,如下例所示:

select  _id, date_modified, _display_name, latitude, longitude, _data, mime_type from video UNION ALL select  _id, date_modified, _display_name, latitude, longitude, _data, mime_type from images ORDER BY date_modified ASC;

此查询返回两个表中所有视频和图像的列表,结果按修改日期排序。然而,android 的 ContentResolver 的查询 API 并不是完全为全面的 SQL 请求而设计的。因此,我不确定如何将这个复合请求放入内容解析器的查询函数中。

因此,我认为您应该根据需要对 Images.Media.EXTERNAL_CONTENT_URI 和 Video.Media.EXTERNAL_CONTENT_URI 执行单独查询,然后整理结果。

关于Android - 以上升的时间顺序检索图像和视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8812452/

相关文章:

android - getSupportFragmentManager().beginTransaction().add(android.R.id.content, f) 不工作

Flutter 下载文件到手机下载目录

带有提供程序模式的Flutter AnimatedList

android - 对图像应用多个滤镜

android - 当 Activity 从 onStop() 返回时,如何在没有任何其他 Activity 回调的情况下直接打开 onResume()

java - Android自动SQL插入

android - 参数类型 'Widget Function(BuildContext)' 不能分配给参数类型 'Widget Function(BuildContext, Widget)' Flutter 中的错误

flutter - Riverpod : Alternate way of overriding initState inside ConsumerWidget

java - 如何使 "provided"范围在 Android Studio 上工作?