【问题标题】:Create cursor loader for data directory为数据目录创建游标加载器
【发布时间】:2017-07-16 09:46:59
【问题描述】:

我已经实现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://)。另一种解决方案是以某种方式使该文件夹对媒体扫描仪可见,详见照片基础知识中的“将照片添加到图库”中。这样做似乎并没有改变任何东西。

【问题讨论】:

    标签: android uri android-cursorloader


    【解决方案1】:

    这里有两种可能的解决方案。

    解决方案 1. 获取私有数据文件夹图像的列表,例如通过使用File.listFiles() 方法并使用MatrixCursor 创建一个自定义的“假”光标。然后,将私有图像添加为“假”光标的行。最后,使用MergeCursor 将两个游标(您对问题已有的游标和“假”游标)合并为一个。

    解决方案 2。 第二个解决方案与第一个解决方案非常相似。您可以create a Content Provider 并查询它,而不是获取文件列表。然后,如上所述,您可以使用 MergeCursor 将两个结果光标合并为一个。

    我把this留在这里供参考。

    【讨论】:

    • 我刚刚重新启动以查看解决方案 1,但我既看不到光标中的图像,也看不到画廊应用程序中的图像。我不确定是否需要做任何额外的事情才能使这些图像从应用程序数据文件夹中可见。我正在将图像添加到适配器,我希望避免使用 MatrixCursor 之类的解决方案。如果是这种情况,我可以考虑将这些项目直接添加到其他光标项目前面的适配器
    • 是的,你是对的。我忘了更改目标目录,我使用的是 Environment.DIRECTORY_PICTURES。因此,您无法将这些图像提供给媒体提供者。我会更新我的答案。如果您使用 CursorAdapter,那么我认为您应该使用 MatrixCursor/MergeCursor 解决方案,因为它并不难实现。
    • Environment.DIRECTORY_PICTURES 是否显示来自 sd 卡中所有文件夹的图片?最终这是我的目标,所以如果这是很好的解决方案。如果您还没有回复,我稍后会尝试并发表评论。
    • 我打电话给Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),它指向公共外部存储,它的文件是公共的,Save the Full-size Photo 段落建议使用。但是在您的情况下,您的图像已存储到从 Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) 返回的私有文件夹中,不幸的是它们无法访问。
    • 不错的收获!我什至没有注意到这一点。我只是查看了他们使用getExternalFilesDir 的示例代码。我接受了你的回答
    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多