我有一个应用程序的想法,并且要做到这一点,我需要在库存相机存储它的图片的文件夹中。但由于大多数制造商都在不同地命名DCIM内的文件夹,有没有办法找到相机保存图片的特定文件夹。此外,我无法列出并打开第一个结果,因为,例如我有5个文件夹。谢谢!
答案 0 :(得分:2)
其中一个解决方案是使用ContentResolver将照片插入MediaStore(它将创建空的JPG文件),检索其路径并从MediaStore中删除它(文件也将被删除)。
public static File getPhotoDirPath(ContentResolver cr)
{
try
{
Uri takenPhotoUri=cr.insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues( 1 ) );
if ( takenPhotoUri == null )
return null;
String photoFilePath=null;
Cursor cursor = cr.query( takenPhotoUri, new String[] { MediaColumns.DATA }, null, null, null );
if ( cursor != null )
{
int dataIdx = cursor.getColumnIndex( MediaColumns.DATA );
if (dataIdx>=0&&cursor.moveToFirst())
photoFilePath = cursor.getString( dataIdx );
cursor.close();
}
cr.delete( takenPhotoUri, null, null );
if (photoFilePath!=null)
return new File(photoFilePath).getParentFile();
return null;
}
catch (Exception ex)
{//insert or delete failed
return null;
}
}
请注意,在某些情况下(与相机应用程序无法保存照片时相同)可能无法成功插入照片,例如。 SD卡被删除(如果设备无法模拟外部存储),外部存储器以只读方式挂载或路径中的某些目录被写保护等。
答案 1 :(得分:1)
您可以将Environment.DIRECTORY_PICTURES 作为有效目录。
以下内容将引用该目录(但并非所有设备都保证):
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
答案 2 :(得分:1)
所以我最终用.exists()
来做String abcd = "is it working ?";
File pathimg = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File testimg = new File (pathimg, "100MEDIA/");
if (testimg.exists()){abcd = testimg.toString();}
else {
File testimg2 = new File (pathimg, "100ANDRO/");
if (testimg2.exists()){abcd = testimg2.toString();}
else {
File testimg3 = new File (pathimg, "Camera/");
if (testimg3.exists()){abcd = testimg3.toString();}
else {
File testimg4 = new File (pathimg, "100LGDSC/");
if (testimg4.exists()){abcd = testimg4.toString();}
else {
abcd = "It's not working";
}
}
}
}
在我的G2上,文件夹“100LGDSC”正在运行。