2017-07-15 38 views
0

我实现photo basics请求相机动作和照片保存到我的数据目录光标装载机:创建数据目录

storage/emulated/0/Android/data/[package]/files/Pictures/[image name] 

我现在希望能够检索所有的图像,然后我d喜欢使用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://)。另一种解决方案是以某种方式使该文件夹对媒体扫描器可见,详细信息请参见照片基础中的“将照片添加到图库”一节。尽管如此,这似乎没有改变。

回答

1

以下是两种可能的解决方案。

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

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

我离开this这里仅供参考。

+0

我刚刚重新启动检查解决方案1,我既不能在我的光标或画廊应用程序中看到图像。我不确定是否还有额外的工作要做,以便从应用数据文件夹中看到这些图像。我将图像添加到适配器,我希望避免像MatrixCursor这样的解决方案。如果是这种情况,我可能会考虑直接将项目添加到其他游标项目前的适配器 –

+0

是的,您是对的。我忘了更改目标目录,我正在使用Environment.DIRECTORY_PICTURES。因此,您无法将这些图像提供给媒体提供商。我会更新我的答案。如果你使用CursorAdapter,那么我相信你应该使用MatrixCursor/MergeCursor解决方案,因为它不难实现。 – kws

+0

'Environment.DIRECTORY_PICTURES'是否显示来自SD卡中所有文件夹的图片?最终,这是我的目标,如果这是很好的解决方案。如果您还没有回复,我会稍后再尝试并发表评论。 –