4

我想获得相机照片的真实路径,而不是拍照。

我现在使用的是:

String path=""; //The real path I want...
String[] projection=new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.DATE_TAKEN};     
final Cursor c=context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.ImageColumns.DATE_TAKEN+" DESC"); 
if(c!=null)
{
  c.moveToFirst();
  path=c.getString(1);
  Log.i(Constants.TAG, "File Path: "+path);
  path=path.substring(0, path.lastIndexOf('/')+1);
}

但是上面的结果只是在某个时候改变了......

对于正常情况,它将是/storage/ext_sd/DCIM/100MEDIA/

(我正在使用 HTC Butterfly,android 4.1.1,在 United Stats 中称为 DroidDNA 的完全相同的模块)

今天下午,在我将一些照片移到另一个文件夹后(在手机上操作,而不是在 PC 上操作)

结果更改为/storage/ext_sd/[some_other_of_my_image_folder]/

如何获得相机照片的真实路径?请帮我 :-(

编辑:我正在尝试另一种方式,如下所示:

Log.i(Constants.TAG, "Photo path: "+f.getPath());
if(f.exists())
{
  File test1=new File(f, "100MEDIA/");
  if (test1.exists())
  {f=test1;}
  else
  {
    File test2=new File(f, "100ANDRO/");
    if(test2.exists())
    {f=test2;}
    else
    {
      File test3=new File(f, "Camera/");
      if(!test3.exists())
      {test3.mkdirs();}
      f=test3;
    }
  }
}
else
{
  f=new File(f, "Camera/");
  f.mkdirs();
}

它返回的路径如下:/storage/sdcard0/DCIM/100MEDIA/,这是我手机的内部 16GB 空间。

我已经将我的相机照片存储设置为外部 microSD,路径应该是/ext_sd/DCIM/100MEDIA/

真的需要帮助,医生!

4

1 回答 1

3

2人投票赞成我的问题,所以我想也许其他程序员也面临同样的问题。

我有办法克服这个问题,以下是我的代码:

String path="";
String[] projection=new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.DATE_TAKEN};     
final Cursor c=context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Images.ImageColumns.DATE_TAKEN+" DESC");
boolean isOK=false; //Found a DCIM path ?
if(c!=null)
{
  c.moveToFirst();
  while(!isOK)
  {
    path=c.getString(1);
    Log.i(Constants.TAG, "File Path: "+path);
    path=path.substring(0, path.lastIndexOf('/')+1);
    isOK=!(path.indexOf("DCIM")==-1); //Is thie photo from DCIM folder ?

    c.moveToNext(); //Add this so we don't get an infinite loop if the first image from
                    //the cursor is not from DCIM
  }
}
Log.i(Constants.TAG, "Only Path: "+path);

表达 :

首先,这是我的 SD 卡

  • /DCIM/100MEDIA/xxx.JPG(相机照片)
  • /Media/image/comics/xman/01.JPG
  • ...
  • ..
  • .
  • /Media/image/hot/youknowwhatitis/hot01.JPG

我总是从context.getContentResolver().query的游标中读取第一条记录。

通常,它先返回 DCIM 内部的照片,然后再返回其他照片/图像/图片。

一天早上,我将一个文件从 DCIM 移动到另一个文件夹,(通过 android 的 Gallery APP)

context.getContentResolver().query的第一条记录更改为其他非 DCIM 内容,

把这个问题带给我...orz


这不是完美的解决方案,如果用户没有拍摄任何照片到 DCIM,这个解决方案将变得毫无用处。

由于我正在开发一个多媒体应用程序,猜测用户应该/必须是一个照片爱好者......这是我到目前为止最好的方法,希望它对其他人带来一点帮助。

于 2013-02-06T07:19:01.043 回答