我想查询MediaStore
设备上的所有照片,但只查看相机拍摄的照片。请注意我尝试在照片上与设备上的任何其他图像媒体(下载,屏幕截图等)进行区分。 MediaStore
包含许多不同的目录或“存储桶”,其中默认的相机/图片位置是其中之一。然而,似乎没有任何关于这个桶命名的标准 - 在我的索尼Z5上,它是“100ANDRO”,在我的三星Galaxy S3上,它只是“相机”。
阅读各种posts on StackOverflow,这似乎与制造商有所不同,但我应该能够在
找到传统“相机文件夹”的路径Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
因此,我可以将查询过滤到该路径上的MediaStore
(例如我的S3上的/storage/emulated/0/DCIM
)。如果用户选择将照片存储在完全非传统的位置,也许使用第三方相机应用程序,则可以。我只希望在这里涵盖最“正常”的用例。
但是,如果我想加载外部SD卡上的照片(如果有的话)该怎么办?
据我所知,“内存”上的照片和SD卡上的照片在BUCKET_DISPLAY_NAME
中的BUCKET_ID
(和MediaStore
}相同。但是,将路径添加到SD卡照片目录似乎非常困难。
那么您如何看待这种方法(获取所有照片):
找到“相机文件夹”路径(如上所述)
查询MediaStore
,在此路径上进行过滤。找到相应的BUCKET_DISPLAY_NAME
再次查询MediaStore
,在步骤2的BUCKET_DISPLAY_NAME
上进行过滤,路径与步骤2中的路径不同。
步骤2将查找内存中的所有照片。 步骤3将在SD卡上找到任何照片(如果有)。 如果没有安装任何卡,或者如果它不包含任何照片,则第3步将为空,因此似乎是一种相当优雅的方法。
答案 0 :(得分:0)
所以我可以将查询过滤到该路径上的
MediaStore
(例如我的S3上的/storage/emulated/0/DCIM
)
您可以使用您找到的链接中的代码来实现这一点,这是您找到的最佳解决方案,然而,就像其他人所说的那样,您无法保证该设备的相机应用程序实际上是将图片存储在Environment.DIRECTORY_DCIM
的目录中,甚至存在其他应用程序也可能使用它来存储除图片之外的任何图像的问题,因为它是公开的...