android得到照片路径没有拍照

时间:2013-02-05 08:30:19

标签: android path camera photo

我想让相机照片真实路径,而不拍照。

我现在使用的是:

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 /

真的需要帮助,MEDIC!

1 个答案:

答案 0 :(得分: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()。查询的第一条记录已更改为其他非DCIM内容,

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


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

由于我正在开发多媒体APP,猜猜用户应该/必须是照片爱好者...... 这是迄今为止我能做的最好的方式,希望它给别人带来一些帮助。