所以这让我忙了一整天。
我正在自定义一个画廊,用户可以在其中选择一个或多个图像,我正在使用一个现有项目,该项目利用CursorLoader
。几乎每个项目都使用媒体库 URI 来查询内存中的所有图像。但是,我只想扫描特定目录并显示其中的图像。
几行代码可以部分实现我想要的功能:
final String imagesDirectory = "/storage/sdcard0/DCIM/"
String selection = MediaStore.Images.Media.DATA + " LIKE '" + imagesDirectory + "%'";
cl = new CursorLoader(MultiImageChooserActivity.this, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, img.toArray(new String[img.size()]), selection, null, null);
我也在 SO 上找到了该代码的选择部分,但它还检索了子目录中的所有图像,这是我不想要的。解决方案可能是检查是否MediaStore.Images.Media.DATA
列包含相同数量的斜杠imagesDirectory
,应该有效:
imagesDirectory: /storage/sdcard0/DCIM/ -> 4
/storage/sdcard0/DCIM/photo.jpg -> 4, direct child
/storage/sdcard0/DCIM/subdir/otherphoto.jpg -> 5, in subdir
我发现在 SQLite 中,这样的查询应该可以工作(检查/
):
SELECT LENGTH(col) - LENGTH(REPLACE(col, '/', ''))
其中col
应该MediaStore.Images.Media.DATA
,但到目前为止我已经尝试了很多不同的selection
变体,但我还没有设法过滤数据。既然你不能给CursorLoader
a rawQuery
(像一个Cursor
),我也做不到。
我尝试的另一件事是不使用MediaStore.Images.Media.EXTERNAL_CONTENT_URI
作为内容 URI,而是来自目录的 URI。所以我尝试了这个:
final String imagesDirectory = "/storage/sdcard0/DCIM/"
cl = new CursorLoader(MultiImageChooserActivity.this,
Uri.fromFile(new File(imagesDirectory)),
img.toArray(new String[img.size()]), null, null, null);
但至今无济于事。
问题:如何使用 a 查询目录中的所有图像,但不查询其子目录中的所有图像CursorLoader
?
我不是 SQLite、查询和方面的英雄CursorLoaders
,这样也许可以解释一点。另外,我确实搜索了类似的问题,但在这个特定主题上没有太多可找到的。甚至谷歌搜索directory cursorloader
不回答任何问题。大多数结果都是关于按目录排序的帖子......
提前致谢。