为数据目录创建游标加载器
Create cursor loader for data directory
我已经实现 photo basics 来请求相机操作并将照片保存到我的数据目录:
storage/emulated/0/Android/data/[package]/files/Pictures/[image name]
我现在希望能够检索所有图像,我想通过使用 CursorLoader 来实现。
以前,为所有外部媒体文件创建 CursorLoader 是这样的:
String[] columns = new String[]{MediaStore.Images.Media._ID,
MediaStore.Images.Media.TITLE,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.SIZE,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_MODIFIED};
return new CursorLoader(this,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
columns,
null,
null,
//Sort by descending date
MediaStore.Images.Media.DATE_MODIFIED + " DESC");
我想这样做,但还要将图像包含在我的私人数据文件夹中。有什么解决办法吗?
我不确定如何检索该文件夹的内容 URI(仅限 file://)。另一种解决方案是以某种方式使该文件夹对媒体扫描仪可见,如照片基础知识中的 "Add the Photo to a Gallery" 所述。不过,这样做似乎没有任何改变。
这里有两种可能的解决方案。
解决方案 1. 获取私人数据文件夹图像列表,例如通过使用 File.listFiles() method and create a custom "fake" cursor using the MatrixCursor. Then, you add the private images as rows of the "fake" cursor. Finally, use a MergeCursor 将两个光标(您已经拥有的一个和 "fake" 一个)合并为一个。
解决方案 2。 第二种解决方案与第一种非常相似。您可以 create a Content Provider 并查询它,而不是获取文件列表。然后,如上所述,您可以使用 MergeCursor 将两个生成的游标合并为一个游标。
这里留下this供参考
我已经实现 photo basics 来请求相机操作并将照片保存到我的数据目录:
storage/emulated/0/Android/data/[package]/files/Pictures/[image name]
我现在希望能够检索所有图像,我想通过使用 CursorLoader 来实现。
以前,为所有外部媒体文件创建 CursorLoader 是这样的:
String[] columns = new String[]{MediaStore.Images.Media._ID,
MediaStore.Images.Media.TITLE,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.SIZE,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_MODIFIED};
return new CursorLoader(this,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
columns,
null,
null,
//Sort by descending date
MediaStore.Images.Media.DATE_MODIFIED + " DESC");
我想这样做,但还要将图像包含在我的私人数据文件夹中。有什么解决办法吗?
我不确定如何检索该文件夹的内容 URI(仅限 file://)。另一种解决方案是以某种方式使该文件夹对媒体扫描仪可见,如照片基础知识中的 "Add the Photo to a Gallery" 所述。不过,这样做似乎没有任何改变。
这里有两种可能的解决方案。
解决方案 1. 获取私人数据文件夹图像列表,例如通过使用 File.listFiles() method and create a custom "fake" cursor using the MatrixCursor. Then, you add the private images as rows of the "fake" cursor. Finally, use a MergeCursor 将两个光标(您已经拥有的一个和 "fake" 一个)合并为一个。
解决方案 2。 第二种解决方案与第一种非常相似。您可以 create a Content Provider 并查询它,而不是获取文件列表。然后,如上所述,您可以使用 MergeCursor 将两个生成的游标合并为一个游标。
这里留下this供参考